我正在使用JNDI框架与专门针对Sun one LDAP的各种LDAP服务器进行交互,我正在观察以下内容:
使用案例:如果管理员重置Sun-One LDAP服务器中任何用户的密码,则 passwordMustChange 属性设置为" on "。因此,用户必须在下次登录时更改其密码。这是记录在案的内容。
我正在使用JNDI通过JAVA代码执行相同的操作。我发现这个属性设置为" on"成功。所以编程逻辑是正确的。
但是当我在LDAP服务器上登录该用户时,它不会给出任何错误或弹出密码已过期的错误,请更改您的密码。 在Active Directory(AD)服务器的情况下,相同的用例可以正常工作 如果是AD,我们需要将 pwdLastSet 设置为 0 。它的工作原理和系统要求在下次登录时更改密码。
相反,相同的用例不适用于任何LDAP风格,例如Sun-One LDAP,ADAM或Open LDAP。 如果有人观察到这样的问题,请告诉我,并建议我如何解决这个问题。
答案 0 :(得分:0)
不幸的是,这种功能没有标准(有互联网草案,已过期,部分在不同的服务器上实现)。 根据您的Sun Directory Server版本,有不同的方法(SunDS 6.x引入了基于Internet草案的新密码策略)。 使用5.x,我似乎记得密码过期时passwordExpirationTime将采用特定值。服务器将返回Bind响应的PasswordExpired Control部分,表示它已过期。
使用6.x及更高版本时,pwdReset操作属性设置为true。如果您在绑定请求中设置了PwdPolicyControl请求,服务器将返回PasswordExpired Control或PwdPolicyControl响应。
答案 1 :(得分:0)
您将其设置在错误的位置。 passwordMustChange
是政策的属性,不属于用户。这意味着如果您为任何用户设置操作属性pwdReset
,他必须在下次登录时更改其密码,并在他这样做时通过响应控制建议。
这反过来意味着在绑定用户时必须使用密码策略请求控件,并检查响应控件。这也意味着您在更改密码时必须使用更改密码扩展操作,而不仅仅是重写属性。
这也解释了为什么您认为必须将objectClass=passwordPolicy
添加到用户条目。你没有。您必须定义一个单独的策略对象,其中包含passswordMustChange
的值和其他策略属性,并在配置中将其指定为默认策略,或者在用户条目中指定作为其特定策略(如果您要走得那么远)。
您需要重新阅读documentation,并明确区分政策属性和用户操作属性。它们是单独列出的。
您使用什么代码进行扩展操作和请求/响应控件?我不得不写我的。几年前我在Sun Java论坛上发布了它:它是代码吗?好奇。