更新Active Directory对象时拒绝访问

时间:2013-12-09 17:15:56

标签: asp.net-mvc active-directory windows-authentication

我有一个针对Active Directory的Windows身份验证应用程序(MVC4)。 用户登录后(通过浏览器登录对话框),他会获取包含他可以更新数据的页面,例如emial地址。

用户点击“保存”按钮后,出现“访问被拒绝”错误,但他在Active Directory中有适当的权限。

我使用以下代码保存用户数据:

using (DirectoryEntry de = new DirectoryEntry (path))
{
    SetEntityPropertyValue(de, "mail", user.Email);
    de.CommitChanges();
}

但是,如果我传递此登录用户的用户名和密码,请执行以下操作:

using (DirectoryEntry de = new DirectoryEntry (path, user, password))
{
    SetEntityPropertyValue(de, "mail", user.Email);
    de.CommitChanges();
}

它有效。怎么了? 如果这不会自动发生,如何从Windows身份验证中获取用户凭据以将它们传递给DirectoryEntry()方法?

我之前没写过,但IIS和AD在不同的机器上运行。

1 个答案:

答案 0 :(得分:0)

我认为您最初使用IIS应用程序池标识对Active Directory进行身份验证,该标识没有足够的权限写入Active Directory,但确实有足够的权限从AD读取项目。相反,我认为您正在寻找impersonation,这将使应用程序作为经过身份验证的Windows用户运行。

尝试将此添加到您的web.config。

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

当然,这将要求模拟的Windows用户也有足够的权限写入Active Directory。