3

我有一个需要帮助的问题。

我使用 LDAP 和 PHP 对用户进行身份验证,我还检查用户密码是否标记为过期。如果用户的密码未过期或管理员已勾选该框以强制重置密码,这一切都可以正常工作。但是,当密码通过组策略过期时,我会遇到问题。

为了让我在用户的密码被标记为过期时仍然可以对用户进行身份验证,我需要将 pwdlastset 值更改为 -1,然后再回到原来的值。但这只是在密码过期而不是更改 pwdlastset 值时抛出异常。

例外:

0x50 (Other (e.g., implementation specific) error; 00000057: SysErr: DSID-031A1202, problem 22 (Invalid argument), data 0 ): updating: CN=Steve,OU=Developer Groups,DC=external,DC=domain,DC=local in

谁能为我确认我是否正确地认为一旦密码通过策略过期我就无法更改此值?

如果我无法更改此值,是否没有解决方法?

谢谢

4

2 回答 2

10

只有系统可以将 pwdLastSet 属性修改为 0 或 -1 以外的任何值。如果指定 0,则密码立即过期。然后,当用户更改密码时,系统会将当前日期/时间分配给 pwdLastSet 属性。

值 -1 对应于 64 位属性中允许的最大整数 2^63-1。此值与 0 相反。它使密码不会过期。当用户下次登录时,系统会将 pwdLastSet 属性设置为当前日期/时间对应的值。

于 2013-09-05T04:17:03.473 回答
0

如果您在应用程序中要求密码过期策略的值的通用设置值,那么您可以将其添加到 pwdLastSet,并与当前时间进行比较以测试它是否过期。

系统就是这样做的。在 Win 2008 服务器之前,只有域范围的密码策略,因此在该模型中可以正常工作。使用细粒度的密码策略可能会有更多的密码策略。我记得,您创建了一个特定类型的组,其成员获取特定策略以便可以查找它。

当然,这两种方法都是特定于 Active Directory 的,并且不适用于任何其他 LDAP 服务器,因为它们使用不同的方法来表示过期密码。

于 2013-09-08T13:57:48.300 回答