Active Directory全局编录中构造的属性(获取帐户的密码到期)

时间:2014-08-08 22:27:58

标签: authentication active-directory ldap windows-server-2008 domaincontroller

在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全局编录(这意味着我们可以查询任何域中的对象)同样的森林)。

问题(最后):全局编录不会同步本地域控制器的所有属性。 “幸运的是”非工作用户帐户控制属性是同步的(讽刺的是),但我们使用的构造属性不是。这意味着我们回到原点,并且无法在帐户密码过期时获取,或者即使密码已过期。

所以,两个主要问题是:

  1. 是否有任何方法可以将构造的属性(或从中计算的值)同步到Active Directory全局目录?
  2. 是否有更好的方法,也许是为了避免我们为获取构造的属性所做的(确实)单一对象查询(我想我试图询问我们是否做错了...)? LI>

    提前致谢!

1 个答案:

答案 0 :(得分:0)

以下是第一个问题的答案:

您林中的每个域都遵循名为架构的相同数据模板。启用Active Directory全局编录属性同步的方法是将其引用到架构中。为此,它退出MMC,您可以在其中管理 Classes Attributes 。抱歉,法国屏幕。

enter image description here

使用W2K12,可以从MMC控制台(MMC.EXE)直接获取架构Active Directory MMC。使用W2K8,你应该注册它:

regsvr32 c:\windowd\system32\schmmgmt.dll

如果适用于您,请稍等一下,将您的问题解答。我对第二个问题的答案感兴趣。