【问题标题】:Access Denied using Impersonation with ASP.NET Directory Services使用模拟与 ASP.NET 目录服务拒绝访问
【发布时间】:2012-07-16 13:46:36
【问题描述】:

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

我收到错误:

错误:无法更改密码(您有权限吗?)。
System.Reflection.TargetInvocationException:异常 已被调用的目标抛出。
---> System.UnauthorizedAccessException:访问被拒绝。
(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))
--- 内部异常堆栈跟踪结束 ---
在 System.DirectoryServices.DirectoryEntry.Invoke(字符串 方法名,对象 [] 参数)
在 System.DirectoryServices.AccountManagement.SDSUtils.SetPassword(DirectoryEntry de, 字符串 newPassword)
在 System.DirectoryServices.AccountManagement.ADStoreCtx.SetPassword(AuthenticablePrincipal p, 字符串 newPassword)

Web.config 读作:

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

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

我的 PrincipalContext 是:

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

非常感谢任何帮助。

【问题讨论】:

标签: asp.net active-directory impersonation directoryservices


【解决方案1】:

你需要添加

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

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

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

【讨论】:

  • 我已经有一个 &lt;authorisation&gt; 部分(我没有包含在原始帖子中)阅读:&lt;authorisation&gt;&lt;allow roles="Group Name" /&gt;&lt;deny users="*" /&gt;&lt;/authorisation&gt;。无论如何,我已经添加了这一行,但它并没有影响它。 Windows 身份验证已启用。
  • deny users="*" 将拒绝所有用户访问,而您只想拒绝匿名用户。这可能是错误的模仿类型。您使用的 principalContext 可能需要交互式用户而不是模拟用户。您可能需要修改您的应用,以便用户输入他们当前的密码。
  • 我确实需要拒绝所有不属于指定角色的用户的访问权限。但是,我将尝试实现交互式用户身份验证。
  • 我无法完成这项工作,尽管我不确定我是否正确地说服了它(WindowsIdentity - 我从来没有获得过模拟级别,只有一个识别级别)。值得一提的是,我的代码可以连接到 AD 并检索有关他们的用户和属性列表(无论是在 VStudio 中运行还是从另一台机器上运行),但它不能进行更改(例如 SetPassword) - 所以某种形式的身份验证似乎正在工作,而其他位似乎不够高。
猜你喜欢
  • 2018-12-26
  • 2012-03-14
  • 2012-03-12
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2015-11-19
  • 2012-09-11
  • 2011-02-01
相关资源
最近更新 更多