在我的节点应用程序中,我有一个用例,我需要只对属于特定组的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
}
);
型
对于此配置,即使组名是随机字符串,身份验证也总是成功的。
那么,要使身份验证工作,正确的过滤器字符串应该是什么?
1条答案
按热度按时间e3bfsja21#
我看到您希望LDAP搜索过滤器匹配“username = x and group = y”,为此,您需要为memberOf属性的值提供完全可分辨的名称。
这应该是可行的:
字符串
上面的示例假设testGroup位于Active Directory域中的默认位置CN=Users。如果它位于其他位置,请适当修改LDAP路径。例如,这在我的隔离测试域中有效,因为我尚未将GroupA组移出Users容器:
型
编辑(4/20/2018):在第二种情况下,根据mvreijn的评论,groupSearchFilter仅用于请求有效用户所属的组列表。它在身份验证过程中不起作用。