验证 LDAP 用户是否属于特定组

问题描述 投票:0回答:1

在我的节点应用程序中,我有一个用例,其中我需要仅对属于特定组的 LDAP 用户进行身份验证。如果用户不属于上述组,则身份验证将失败。

我正在使用库 ldapauth-fork 进行 LDAP 身份验证。

我尝试了各种过滤器方法,但没有一个能按预期工作。以下是我尝试过的尝试:

let ldapConnector = new LdapAuth (
    {
        url              : config.ldap.url,
        bindDN           : config.ldap.bindDN,
        adminPassword    : config.ldap.adminPassword,
        searchBase       : config.ldap.searchBase,
        searchFilter     : "(&(sAMAccountName=testUser)(memberOf=testGroup))",
        cache            : true,
        includeRaw       : true,
        log              : logger
    }
);

对于此配置,即使用户是

no such user: "testuser"
组的成员,我也始终会得到
testGroup

let ldapConnector = new LdapAuth (
    {
        url               : config.ldap.url,
        bindDN            : config.ldap.bindDN,
        adminPassword     : config.ldap.adminPassword,
        searchBase        : config.ldap.searchBase,
        searchFilter      : "(sAMAccountName=testuser)", 
        groupSearchFilter : "(member=testGroup)"
        cache             : true,
        includeRaw        : true,
        log               : logger
    }
);

对于此配置,即使组名称是随机字符串,身份验证也始终成功。

那么,正确的过滤字符串应该是什么才能使身份验证工作?

javascript node.js ldap ldap-query ldapauth
1个回答
4
投票

我发现您希望 LDAP 搜索过滤器匹配“用户名 = x 和组 = y”。为此,您需要为 memberOf 属性的值提供完全可分辨的名称。

这应该有效:

(&(sAMAccountName=testuser)(memberOf=cn=testGroup,cn=Users,DC=yourdomain,DC=yourdomainsuffix))

上面的示例假设 testGroup 位于 Active Directory 域中 CN=Users 的默认位置。如果位于其他位置,请根据需要修改 LDAP 路径。例如,这在我的隔离测试域中有效,因为我尚未将 GroupA 组移出用户容器:

(&(sAMAccountName=Todd)(memberOf=cn=GroupA,cn=Users,DC=dev,DC=local))

编辑(4/20/2018):在第二种情况下,根据 mvreijn 的评论,groupSearchFilter 仅用于请求有效用户所属的组列表。认证时不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.