2012-05-09 55 views
2

如果帐户没有“用户必须在下次登录时更改”,我可以更改密码。
但是,如果选中该框,当我尝试访问用户时,出现密码错误错误。尝试通过ASP.NET更改AD中“用户必须更改”的密码

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

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

回答

2

我在我最后一个位置的一个项目上做了这个。我们没有尝试用自己的凭证绑定用户,而是建立了一个AD帐户,仅拥有更改密码的权限。

因此,一旦您的错误代码指示用户必须更改其密码,请求新密码,以admin身份获取用户并进行更改。

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

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

代码将是这样的:

 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"); 
+0

这里实现同样的事情。研究和研究解决方案和自制一些非常相似的东西。 – zeroef

+0

你是如何使用管理员凭证的?你是否模仿或者是否有通过凭据传递设置密码的呼叫? – eych

+0

它在PrincipalContext对象的构造函数中,应该有一个包含用户名和密码的重载。 – KennyZ