我能够使用spring boot ActiveDirectoryLdapAuthenticationProvider进行LDAP身份验证。相同的代码可以在其他客户端环境中工作,但在某个客户端上却不能正常工作。我可以连接到LDAP和bind,也可以连接到roodn,一切都很正常。
在搜索筛选器中,代替使用默认筛选器,即:
(&(objectClass=user)(userPrincipalName={0}))我正在使用:
(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})) 我尝试了很多搜索过滤器,但似乎都不起作用。
有人可以在这方面帮助,没有太多关于LDAP的知识。
发布于 2020-05-22 21:49:04
真正的问题是你应该通过userPrincipalName还是sAMAccountName来匹配。这真的取决于你的用户期望什么。
当你说“sAMAccountName”时,你通常会想到用户名。
userPrincipalName看起来像一个电子邮件地址。它通常与后跟@的sAMAccountName和域DNS名称相同,但不必如此。
你可以在这里看到更多关于它的信息:User Naming Attributes
无论用户键入什么值作为用户名,都应该与您在此处选择的属性相匹配。
发布于 2020-06-01 17:07:12
@gariel用户希望严格使用sAMAccountName登录。我使用电子邮件ID (&(objectClass=user)(userPrincipalName={0}))筛选器进行登录。但是要让它在sAMAccountName上使用他们的LDAP,把它改成(&(objectClass=user)(sAMAccountName={0}))是行不通的。它们的sAMAccountName和用户主体名称不相同。
作为一种变通办法,用户输入sAMAccoutName,我使用自定义过滤器拦截请求,而不是完全依赖于spring安全进行身份验证。在自定义过滤器中,我使用JAVA代码查询LDAP以提供该sAMAccountName的emailId。有了用户的emailID之后,我将请求中的username字段从sAMAccountName更新为emailID,然后继续进行身份验证请求(请记住,我已经使用emailID进行了LDAP身份验证)。
在新文件中:.addFilterBefore( SecurityConfig CustomFilter(),UsernamePasswordAuthenticationFilter.class) CustomFilter是我执行上述所有操作的位置。
现在一切正常,但我有新的问题。当用户成功通过身份验证时,如果用户不在本地数据库中并且不需要任何权限,则可以正常工作。但是用户在本地数据库中被定义为ADMIN,并且在身份验证之后,我们为它提供了ADMIN权限,由于某种原因,它进入了一个循环。
https://stackoverflow.com/questions/61949318
复制相似问题