使用 LDAP 服务器对用户进行身份验证
Posted
技术标签:
【中文标题】使用 LDAP 服务器对用户进行身份验证【英文标题】:Authenticate users with LDAP server 【发布时间】:2015-07-09 12:51:06 【问题描述】:我正在使用 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 的值,以便能够从用户的两个部分对任何用户进行身份验证?
【问题讨论】:
【参考方案1】:ldapSecurityPrincipalPattern
用于告诉 LDAP 适配器需要哪些识别信息才能成功验证用户身份。
例如,如果您的 LDAP 服务器设置为使用电子邮件,则您的模式将是 username@domain.com
。您的问题相当于询问如何让适配器对username@google.com
和username@***.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"
。
【讨论】:
以上是关于使用 LDAP 服务器对用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
通过 Spring security ldap 对用户进行身份验证时未授予任何权限错误
使用 MobileFirst 在移动应用程序中使用 LDAP 服务器对用户进行身份验证