Java Spring安全性似乎无法识别已禁用的LDAP帐户

Java Spring安全性似乎无法识别已禁用的LDAP帐户,java,spring-security,openldap,spring-ldap,Java,Spring Security,Openldap,Spring Ldap,有关总结问题,请参见下面的编辑-1 我正在使用Spring安全库(v3.0.5)来处理web应用程序(部署在JBoss AS7中)的身份验证。帐户管理由OpenLDAP之上的IdM处理 创建新帐户时,默认情况下,将“nsaccountlock”操作属性设置为“true”。我们可以通过登录IdM web门户并列出用户来确认帐户已“禁用”——新用户被列为禁用 问题是,我们的web应用程序在搜索用户条目时似乎完全忽略了nsaccountlock属性。springframework为所有尝试进行身份验证

有关总结问题,请参见下面的编辑-1

我正在使用Spring安全库(v3.0.5)来处理web应用程序(部署在JBoss AS7中)的身份验证。帐户管理由OpenLDAP之上的IdM处理

创建新帐户时,默认情况下,将“nsaccountlock”操作属性设置为“true”。我们可以通过登录IdM web门户并列出用户来确认帐户已“禁用”——新用户被列为禁用

问题是,我们的web应用程序在搜索用户条目时似乎完全忽略了nsaccountlock属性。springframework为所有尝试进行身份验证的帐户记录报告“Enabled:true”,无论它们是否具有nsaccountlock=true或false

我已经搜索了尽可能多的springframework源代码,但没有找到任何实际将“enabled”状态设置为false的内容(请参见org.springframework.security.ldap.userdetails.LdapUserDetailsImpl和任何子类)。我本以为它会发生在org.springframework.security.ldap.userdetails.LdapUserDetailsMapper.mapUserFromContext()中,但它肯定不会在任何地方设置启用标志

LDAP查找和条目检索是在几个.xml文件中配置的(很遗憾,我现在无法在这里发布),这些文件定义了类的使用,如org.springframework.security.LDAP.authentication.ldapaauthenticationProvider、org.springframework.security.LDAP.search.FilterbasedapUserSearch等

我应该使用不同类型的org.springframework.security.core.userdetails.userdetails实现从LDAP捕获禁用状态吗?我是否缺少一些明显的配置元素,这些元素指示Spring如何确定LDAP条目的禁用状态

注意:我可以将LDAP搜索配置为在UserDetails响应中获取“nsaccountlock”作为属性,并且该属性已正确记录 (该值是否为真)但仍不影响“已启用”布尔值。它只是充当另一位元数据(如电话、地址、电子邮件等)

编辑-1

我可能事先问错了问题。最后,我想知道:

什么会导致LdapUserDetailsImpl.isEnabled()返回false?i、 例如,我们需要做什么才能确保Spring Security识别禁用的帐户?

我希望这是一个配置问题。我想这与AuthenticationManager有关(我们使用org.jasig.cas.authentication.AuthenticationToInManagerImpl)


谢谢您的帮助,我为这个麻烦的问题道歉。

据我所知,OpenLDAP和LDAP协议,
nsaccountlock
不是OpenLDAP用来跟踪锁定帐户的属性,而是Sun Directory Server(Sun LDAP目录)中使用的属性

但从OpenLDAP的角度来看,它与任何其他信息属性都是一样的


如果您想管理密码策略,您必须实现overlay
ppolicy
,据我所知,这是OpenLDAP和LDAP协议所描述的,
nsaccountlock
不是OpenLDAP用来跟踪锁定帐户的属性,而是Sun Directory Server中使用的属性(Sun LDAP目录)

但从OpenLDAP的角度来看,它与任何其他信息属性都是一样的


如果你想管理密码策略,你必须实现上面描述的overlay
p策略

你使用绑定身份验证吗?如果帐户被锁定,绑定应该会失败。我不确定正在使用哪种身份验证。我可以说我们配置为使用org.jasig.cas.authentication.AuthenticationManagerImpl作为身份验证管理器。它配置了一些主体解析程序(如com.jericho.cas.authentication.Principal.CustomUsernamePasswordCredentialsToPrincipalResolver)。LDAP搜索由org.springframework.security.LDAP.search.FilterbasedapUserSearch处理,该搜索在内部调用org.springframework.security.LDAP.SpringSecurityLdapTemplate.searchForSingleEntry()。无论如何,没有绑定失败…您使用绑定身份验证吗?如果帐户被锁定,绑定应该失败。我不确定正在使用哪种身份验证。我可以说,我们配置为使用org.jasig.cas.authentication.AuthenticationManagerImpl作为身份验证管理器。它配置了一些主要解析程序(如com.jericho.cas.authentication.principal.CustomUsernamePasswordCredentialsToPrincipalResolver)。LDAP搜索由org.springframework.security.LDAP.search.FilterbaseDapUserSearch处理,它在内部调用org.springframework.security.LDAP.SpringSecurityLdapTemplate.searchForSingleEntry().无论如何,没有绑定失败。。。