代码之家  ›  专栏  ›  技术社区  ›  Jimmy

ASP.NET C Active Directory-查看用户密码过期的时间

  •  4
  • Jimmy  · 技术社区  · 15 年前

    我有一个有趣的问题,我正在写一个密码管理网页/服务,我正在试图找到一种方法来确定用户的密码何时到期,这样我就可以用它手动重置其他密码,并发送电子邮件等。

    我遇到的问题是,当我试图循环访问我的用户时,我得到的大部分用户没有pwdLastSet属性,因此我无法确定它将在何时过期。

    因此,我想我正在寻找一种好的方法来检查用户的密码何时到期,除了使用pwdlastset属性和计算剩余时间之外。

    多谢。

    3 回复  |  直到 6 年前
        1
  •  8
  •   marc_s    15 年前

    事实上,这比你起初想象的要复杂得多……

    • 为了知道密码可以有效多长时间,您需要阅读“域策略”并找出方法

    然后:

    • 如果用户在其“useraccountcontrol”中设置了“uf ou don ou expire ou passwd”标志,则其密码将永远不会过期。
    • 如果“pwdlastset”值(“adslageinteger”或int64值,首先很难读取)为0,则用户下次登录时必须更改密码。
    • 如果“pwdlastset”值为-1,则从未设置密码。
    • 只有当以上都不为真时,“pwdlastset”值才包含上次设置密码的日期,您可以将域策略中的“maxpasswordage”添加到该日期,这将为您提供用户密码将过期的日期。

    唷!你认为这会很棘手吗?-)

    马克

    PS:如果你对基于.NET的广告编程很认真的话,你应该有这本书:

    DevGuide http://ecx.images-amazon.com/images/I/512V652XBSL._SS500_.jpg

    The .NET Developer's Guide to Directory Services Programming

    这本书包含了所有的优点,比如确定用户的密码到期日期,确定用户帐户锁定状态等等——强烈推荐!Joe和Ryan做了一个出色的工作,收集所有这些信息并对其进行解释,这样即使是像我这样的普通Joe程序员也能理解它:-)

        2
  •  0
  •   Jeff Siver    15 年前

    据我所知,如果pwdlastset为零或丢失,则用户在下次登录时需要更改其密码,或者其帐户设置为非过期密码。这就是你看到的原因吗?

        3
  •  0
  •   Tawab Wakil Germ    6 年前

    另一种方法是:

    public static DateTime GetPasswordExpirationDate(UserPrincipal user)
    {
        DirectoryEntry deUser = (DirectoryEntry)user.GetUnderlyingObject();
        ActiveDs.IADsUser nativeDeUser = (ActiveDs.IADsUser)deUser.NativeObject;
        return nativeDeUser.PasswordExpirationDate;
    }
    

    您需要添加对Activeds COM库的引用,该库通常位于c:\windows\system32\activeds.tlb。