如果 LDAP 用户是特定组的一部分,则对他进行身份验证
Authenticate LDAP user if he's a part of a specific group
在我的节点应用程序中,我有一个用例,在该用例中我需要仅对属于特定组的 LDAP 用户进行身份验证。如果用户不属于上述组,则身份验证应该失败。
我正在使用库 ldapauth-fork 进行 LDAP 身份验证。
我尝试了各种过滤器方法,但 none 中的方法按预期工作。以下是我尝试过的尝试:
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
}
);
对于此配置,身份验证始终成功,即使组名是随机字符串也是如此。
那么,使身份验证有效的正确过滤器字符串应该是什么?
我看到您想要在 "username = x and group = y" 上进行 LDAP 搜索过滤器匹配。为此,您需要为 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 仅用于请求有效用户所属的组列表。它在身份验证期间不起作用。
在我的节点应用程序中,我有一个用例,在该用例中我需要仅对属于特定组的 LDAP 用户进行身份验证。如果用户不属于上述组,则身份验证应该失败。
我正在使用库 ldapauth-fork 进行 LDAP 身份验证。
我尝试了各种过滤器方法,但 none 中的方法按预期工作。以下是我尝试过的尝试:
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
}
);
对于此配置,身份验证始终成功,即使组名是随机字符串也是如此。
那么,使身份验证有效的正确过滤器字符串应该是什么?
我看到您想要在 "username = x and group = y" 上进行 LDAP 搜索过滤器匹配。为此,您需要为 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 仅用于请求有效用户所属的组列表。它在身份验证期间不起作用。