Active directory LDAP pwdlastset无法更改,但显示错误

Active directory LDAP pwdlastset无法更改,但显示错误,active-directory,ldap,Active Directory,Ldap,我有个问题需要帮助 我使用LDAP和PHP对用户进行身份验证,还检查用户密码是否标记为过期。如果用户的密码尚未过期,或者管理员已勾选此框以强制重置密码,则所有这些都可以正常工作。但是,当密码通过组策略过期时,我遇到了一个问题 为了在用户的密码被标记为过期时仍然能够对其进行身份验证,我需要将pwdlastset值更改为-1,然后返回到最初的状态。但这只是在密码过期时引发异常,而不是更改pwdlastset值 例外情况: 0x50 (Other (e.g., implementation speci

我有个问题需要帮助

我使用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
有人能帮我确认一下,一旦密码通过策略过期,我就不能更改这个值的想法是否正确吗

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


谢谢

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


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

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

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


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

我相信您不能在pwdLastSet属性上设置除0和-1以外的值,但无法确认我对任何可靠来源的怀疑…是否存在此限制?如果能够让用户的密码根据策略过期,而不必让服务台安排密码更改,那就太好了。对不起,我不明白当密码通过组策略过期时您会遇到什么问题。事实上,请忽略我,如果用户密码已通过组策略过期,我可以将pwdlastset的值设置为0,因为它将允许该值,并指示用户密码已过期。:)问题是,如果密码通过策略过期,那么pwdlastset值不是0,而是一个大整数和一个AD时间戳。但是我可以将其设置为0而不会引起任何问题。我使用
UserPrincipal
newUser.ExpirePasswordNow()
before
newUser.Save(),我得到了关于00000523的错误:SysErr:DSID-031A12C8,问题22(无效参数),数据0