我在与Active Directory不同的服务器中有一个Web应用程序,我想更改用户密码。代码是下一个:
string newPassword = Membership.GeneratePassword(int.Parse(WebConfigurationManager.AppSettings["passLenght"]),
int.Parse(WebConfigurationManager.AppSettings["passNonAlpha"]));
DirectoryEntry de = new DirectoryEntry(WebConfigurationManager.ConnectionStrings["ADConnString"].ConnectionString,
WebConfigurationManager.AppSettings["ADAdmin"], WebConfigurationManager.AppSettings["ADAdminPass"]);
DirectorySearcher deSearch = new DirectorySearcher(de);
deSearch.Filter = "(&(objectClass=user) (userPrincipalName=" + name + "))";
SearchResultCollection results = deSearch.FindAll();
if (results.Count == 1)
{
foreach (SearchResult OneSearchResult in results)
{
DirectoryEntry AlterUser = OneSearchResult.GetDirectoryEntry();
AlterUser.AuthenticationType = AuthenticationTypes.Secure;
AlterUser.Invoke("SetPassword", newPassword);
AlterUser.CommitChanges();
AlterUser.Close();
}
}
当我在我的开发环境(Active Directory和Web应用程序在同一台服务器上)运行时,它正在运行。但是当我尝试在生产环境中运行它时,我遇到了下一个错误:
调用目标抛出了异常
我错过了什么?
感谢。
编辑:
我可以深入了解异常错误,我得到了这个:
访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
答案 0 :(得分:8)
权限是问题所在。运行ASP.NET代码的帐户没有设置帐户密码的权限。
或者:
SetPassword
来电它在您的开发环境中工作/生产失败的原因可能是由于:
的组合LogonUser
的调用)才能向AD进行身份验证。答案 1 :(得分:1)
代码看起来正确。这可能会发生,因为您通过Active Directory发送的密码不符合最低要求。尝试使用更复杂的密码,例如“M2k3ThisWork!”
答案 2 :(得分:0)
如果您想更改AD的密码,请使用此
Timestamp('2004-03-29 00:00:00-0456', tz='America/New_York')