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