2

如果帐户没有选中“用户下次登录时必须更改”,我可以更改密码。
但是,如果选中该框,当我尝试访问用户时会收到错误的密码错误。

LogOnUser() 返回正确的错误代码,因此我知道用户必须更改密码。
正如 Joe Kaplan 所说(早2004 年),我无法绑定到用户以更改他们的密码。

无论是使用 AccountManagement/PrincipalContext 还是 DirectoryEntry/DirectorySearcher,都是同样的问题。

4

1 回答 1

2

我在上一个职位的一个项目中这样做了。我们没有尝试使用他们自己的凭据绑定到用户,而是设置了一个仅具有更改密码权限的 AD 帐户。

因此,一旦您有指示用户必须更改密码的错误代码,请询问新密码,以管理员身份获取用户,然后进行更改。

我记得,我们必须明确地传递管理员用户名和密码才能使其工作,而不是依赖于运行代码的凭据。

为了安全起见,我们将受限管理员用户名和密码的加密副本存储在注册表中,并在我们拨打电话时对其进行解密。

代码将是这样的:

        PrincipalContext dc = new PrincipalContext(ContextType.Domain, 
            "www.yourdomain.com", "dc=yourdomain,dc=com", 
            ContextOptions.SimpleBind, "AdminUserName", "AdminPassword");
        UserPrincipal usr = UserPrincipal.FindByIdentity(dc, 
            "UserWhoNeedsPasswordChanged");
        usr.ChangePassword("oldPass", "newPass");
于 2012-05-14T17:48:40.730 回答