我使用JNDI框架与各种LDAP服务器(特别是Sun one LDAP )进行交互,我注意到以下内容:
用例:如果管理员重置Sun-One LDAP服务器中任何用户的密码,则passwordMustChange属性设置为"on“。因此,用户必须在下次登录时更改他/她的密码。这是记录在案的。
我正在使用JNDI通过JAVA代码执行相同的操作。我观察到这个属性被设置为"on“成功。所以编程逻辑是正确的。
但是,当我在LDAP服务器上与该用户登录时,它不会出现任何错误,也不会弹出密码过期的消息,请更改您的密码。对于Active Directory (AD )服务器,在AD情况下,同样的用例可以正常工作,我们需要将pwdLastSet设置为。它正常工作,系统要求在下次登录时更改密码。
相反,相同的用例不适用于任何LDAP风格,例如Sun-One LDAP、ADAM或Open。请让我知道是否有人注意到这样的问题,并建议我如何解决这个问题。
发布于 2015-03-11 21:12:37
你把它放错地方了。passwordMustChange是策略的属性,而不是用户的属性。这意味着,如果您为任何用户设置了操作属性pwdReset,他必须在下次登录时更改他的密码,当他这样做时,这将通过响应控制得到建议。
这意味着在绑定用户时必须使用密码策略请求控件,并检查响应控件。这也意味着在更改密码时必须使用更改密码扩展操作,而不仅仅是重写属性。
这也解释了为什么您认为必须向用户条目中添加objectClass=passwordPolicy。没有。您必须定义一个单独的策略对象,其中包含passswordMustChange和其他策略属性的值,并在配置中指定它为默认策略,或者在用户条目中指定为他的特定策略。
您需要重新阅读文档并明确区分策略属性和用户操作属性。他们是分开列的。
用于扩展操作和请求/响应控件的代码是什么?我不得不写我的。几年前,我在Sun Java论坛上发布了它:这是代码吗?只是好奇而已。
发布于 2015-03-11 11:12:46
不幸的是,这种特性没有标准(有一个互联网草案,过期了,并且在不同的服务器上部分实现)。根据您的版本,有不同的方法可以做到这一点(SunDS 6.x引入了基于互联网草案的新密码策略)。使用5.x时,我似乎还记得,当密码过期时,passwordExpirationTime将获得一个特定的值。服务器将返回绑定响应的PasswordExpired控件部分,说明它已过期。
对于6.x和更高版本,pwdReset操作属性被设置为true。如果在绑定请求中设置了PasswordExpired请求,服务器将返回PwdPolicyControl控件,或者返回PwdPolicyControl响应。
https://stackoverflow.com/questions/28983125
复制相似问题