我正在使用LDAP登录模块在混合应用程序中使用LDAP服务器对用户进行身份验证。在authenticationConfig.xml中,我配置了loginModule参数。
<parameter name="ldapSecurityPrincipalPattern"
value="uid={username}, cn=users,dc=kadrlar,dc=uz"/>
<parameter name="ldapSearchFilterPattern"
value="(uid={username})"/>
<parameter name="ldapSearchBase"
value="dc=kadrlar,dc=uz"/>
身份验证工作正常。这是用户的一部分。
我在LDAP中有一些用户,我必须ldapSecurityPrincipalPattern
使用value="uid={username}, cn=users,dc=core,dc=kadrlar,dc=uz"/>
所有其他参数都相同。这是用户的另一部分。
如何指示ldapSecurityPrincipalPattern的值能够在不更改ldapSecurityPrincipalPattern
的值的情况下对来自用户的两个部分的任何用户进行身份验证?
答案 0 :(得分:0)
ldapSecurityPrincipalPattern
用于告知LDAP适配器成功验证用户需要哪些标识信息。
例如,如果您的LDAP服务器设置为使用电子邮件,则您的模式将为{username}@domain.com
。您的问题等同于询问如何让适配器对{username}@google.com
和{username}@stackoverflow.com
进行身份验证,这显然是不可能的,因为LDAP适配器没有处理多次尝试的功能和所涉及的逻辑处理无法连接和使用其他安全模式重试。
一种可能的解决方案是将模式设置为{username}
,
并强制最终用户传递包括域名在内的完整电子邮件地址。
同样,在你的情况下,你可以做的是将ldapSecurityPrincipalPattern
设置为{username}
,并在实现中引入一些逻辑,它从最终用户获取登录名,
并决定是否设置username="uid={login}, cn=users,dc=kadrlar,dc=uz"
或username="uid={login}, cn=users,dc=core,dc=kadrlar,dc=uz"
。