在Active Directory(使用LDAP)之上构建自定义身份验证服务,我们现在需要查看帐户的密码是否已过期(当密码过期/过期时,最好还)。我们需要在查询帐户时看到这一点(在用户请求的上下文中,{strong>不是在bind()
)。
Active Directory中有几个可用的标志。我们尝试的第一个是User-Account-Control属性,如果密码过期,则应设置位ADS_UF_PASSWORD_EXPIRED
:
用户密码已过期。该标志由系统使用Pwd-Last-Set属性和域策略中的数据创建。
我们无法让它发挥作用,并找到了SimpleADSI的解释:
注意:此位无法正常工作!
通常,此用户帐户控制位应指示用户的密码已过期。但是,当密码实际到期时,系统不会设置它,也不能通过设置此位强制用户在下次登录时更改密码。
他们改为引用constructed attribute msDS-User-Account-Control-Computed,其中还包含一些用于检查密码到期的内容:UF_PASSWORD_EXPIRED
。还有msDS-UserPasswordExpiryTimeComputed,另一个构造属性,用于在密码到期时获取。完美,有一点需要注意:
构建的属性不能作为LDAP搜索请求中的值数据返回。除非搜索范围设置为“base”,这意味着LDAP客户端只访问一个对象。
这意味着我们必须为每个帐户执行一次额外查询以获取构造的属性。不理想,但它有效。
接下来,林中的更多Active Directory域也希望使用新的自定义身份验证服务,因此我们不再查询本地域控制器,而是开始查询Active Directory全局编录(这意味着我们可以查询任何域中的对象)同样的森林)。
问题(最后):全局编录不会同步本地域控制器的所有属性。 “幸运的是”非工作用户帐户控制属性是同步的(讽刺的是),但我们使用的构造属性不是。这意味着我们回到原点,并且无法在帐户密码过期时获取,或者即使密码已过期。
所以,两个主要问题是:
提前致谢!
答案 0 :(得分:0)
以下是第一个问题的答案:
您林中的每个域都遵循名为架构的相同数据模板。启用Active Directory全局编录属性同步的方法是将其引用到架构中。为此,它退出MMC,您可以在其中管理 Classes 和 Attributes 。抱歉,法国屏幕。
使用W2K12,可以从MMC控制台(MMC.EXE)直接获取架构Active Directory MMC。使用W2K8,你应该注册它:
regsvr32 c:\windowd\system32\schmmgmt.dll
如果适用于您,请稍等一下,将您的问题解答。我对第二个问题的答案感兴趣。