asp.net - Active Directory - 调用目标已引发异常

标签 asp.net active-directory reset-password

我在 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 应用程序位于同一服务器上)中运行它时,它正在运行。但是当我尝试在生产环境中运行它时,我遇到了下一个错误:

Exception has been thrown by the target of an invocation

我错过了什么?

谢谢。

编辑:

我可以深入研究异常错误,我得到了这个:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

最佳答案

权限是问题所在。运行 ASP.NET 代码的帐户没有设置帐户密码的权限。

或者:

  • 在具有所需权限的用户下运行 AppPool,或者
  • 使用impersonation提升 SetPassword 调用的权限

它在您的开发环境中工作/在生产中失败的原因可能是由于以下因素的组合:

  • 您正在 Visual Studio 开发 Web 服务器下运行该应用,该服务器在您的用户帐户下运行,该帐户具有必要的权限。在“真正的”IIS 下运行它会在特权较低的帐户下运行它。
  • 在实际环境中,从 Web 服务器到 AD 服务器还有另一台机器跳跃,并且凭证不会被传递。 Web 服务器需要具有网络凭据(作为 AppPool 身份的一部分,或调用 LogonUser)才能向 AD 进行身份验证。

关于asp.net - Active Directory - 调用目标已引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901921/

相关文章:

.net - 在不停机的情况下部署 ASP.NET 网站更改和 SQL Server 更改

java - Windows 与 Tomcat 的集成安全性

c# - System.DirectoryServices.AccountManagement.PrincipalCollection - 如何检查委托(delegate)人是用户还是组?

c# - MVC Web 应用程序包和脚本、样式呈现

c# - 需要帮助将 Kendo TreeView 绑定(bind)到本地数据源

azure - 验证 Azure Active Directory 中的用户;不使用 SSO,但使用用户名和密码

c# - 如何使用 ASP.NET MVC 5 的 UserManager 重置密码

python - django 自定义重置密码表单

Meteor 帐户重置密码 token 始终为空

c# - 如何在回发后将文本保存到绑定(bind)数据库中数据的文本框