我有一个问题,我需要一些帮助。
我使用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
任何人都可以向我确认,一旦密码通过政策过期,我是否认为我无法更改此值?
如果我无法更改此值,是否有解决方法?
由于
答案 0 :(得分:9)
只有系统可以将pwdLastSet属性修改为0或-1以外的任何值。如果指定0,则密码立即过期。然后,当用户更改其密码时,系统会将当前日期/时间分配给pwdLastSet属性。
值-1对应于64位属性中允许的最大整数,2 ^ 63-1。该值与0相反。它使密码不过期。当用户下次登录时,系统会将pwdLastSet属性设置为与当前日期/时间对应的值。
答案 1 :(得分:0)
如果您要求应用中的通用设置值为密码到期策略的值,那么您可以将其添加到pwdLastSet,并与当前时间进行比较以测试它是否已过期。
系统是如何做到的。在Win 2008服务器之前,只有域范围的密码策略,因此在该模型中工作正常。使用细粒度密码策略可能会有更多密码策略。我记得,你创建了一个特定类型的组,其成员获得特定的策略,以便可以查找。
当然,这两种方法都是特定于Active Directory的,并且不适用于任何其他LDAP服务器,因为它们使用不同的方法来表示过期的密码。