使用ASP.NET目录服务模拟访问被拒绝

时间:2012-07-17 15:32:16

标签: asp.net active-directory impersonation directoryservices

我正在使用目录服务来更改用户的Active Directory密码,作为ASP.NET网站上一组管理工具的一部分。

我收到错误:

  

错误:无法更改密码(您是否有权限?)   System.Reflection.TargetInvocationException:Exception   被调用的目标抛出了   ---> System.UnauthorizedAccessException:访问被拒绝   (HRESULT异常:0x80070005(E_ACCESSDENIED))
  ---内部异常堆栈跟踪结束---
  在System.DirectoryServices.DirectoryEntry.Invoke(String   methodName,Object [] args)
  在System.DirectoryServices.AccountManagement.SDSUtils.SetPassword(DirectoryEntry   de,String newPassword)
  在System.DirectoryServices.AccountManagement.ADStoreCtx.SetPassword(AuthenticablePrincipal)   p,String newPassword)

Web.config读到:

<authentication mode="Windows" />
<identity impersonate="true" />

在Visual Studio调试环境中,“设置密码”例程成功完成,但在从其他计算机访问时则不会。我正在尝试使用模拟来允许此请求 - 网站可以正确地告诉我我的域名和用户名(使用Context.User.Identity),并可以在Active Directory中查询两个环境中所有用户的列表。

我的PrincipalContext是:

new PrincipalContext(ContextType.Domain, "DOMAINNAME");

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

您需要添加

<authorisation>
    <deny user="?" />
</authorisation>

这会拒绝匿名用户访问,强制用户进行身份验证,然后通过模拟将成为活动用户。如果没有这个,你仍然可以作为IUser来宾帐户进行连接。

您还需要在IIS中启用Windows身份验证。