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

mitkmikd  于 6个月前  发布在  Java
关注(0)|答案(1)|浏览(62)

在我的节点应用程序中,我有一个用例,我需要只对属于特定组的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
    }
);


对于此配置,即使组名是随机字符串,身份验证也总是成功的。
那么,要使身份验证工作,正确的过滤器字符串应该是什么?

e3bfsja2

e3bfsja21#

我看到您希望LDAP搜索过滤器匹配“username = x and group = y”,为此,您需要为memberOf属性的值提供完全可分辨的名称。
这应该是可行的:

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

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

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


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

相关问题