试图更改一个密码,该密码为;“用户必须更改”;通过ASP.NET在广告中的应用

试图更改一个密码,该密码为;“用户必须更改”;通过ASP.NET在广告中的应用,asp.net,active-directory,passwords,Asp.net,Active Directory,Passwords,如果帐户未选中“用户下次登录时必须更改”,我可以更改密码。 但是,如果选中此框,则在尝试访问用户时会出现错误的密码错误 LogOnUser()返回正确的错误代码,因此我知道用户必须更改密码。 正如Joe Kaplan所说(早在2004年),我无法绑定到用户来更改他们的密码 无论是使用AccountManagement/PrincipalContext还是DirectoryEntry/DirectorySearcher,这都是同样的问题。我在上一个职位上的一个项目中这样做了。我们没有尝试使用用户自

如果帐户未选中“用户下次登录时必须更改”,我可以更改密码。
但是,如果选中此框,则在尝试访问用户时会出现错误的密码错误

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


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

我在上一个职位上的一个项目中这样做了。我们没有尝试使用用户自己的凭据绑定到用户,而是设置了一个只具有更改密码权限的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");

在这里实现了同样的事情。研究了一个解决方案,并自制了一些非常类似的东西。你是如何使用管理员凭据的?您是否模拟了密码,或者是否调用了设置密码并传递了凭据?它位于PrincipalContext对象的构造函数中,应该有一个包含用户名和密码的重载。