我有一个针对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在不同的机器上运行。
答案 0 :(得分:0)
我认为您最初使用IIS应用程序池标识对Active Directory进行身份验证,该标识没有足够的权限写入Active Directory,但确实有足够的权限从AD读取项目。相反,我认为您正在寻找impersonation,这将使应用程序作为经过身份验证的Windows用户运行。
尝试将此添加到您的web.config。
<configuration>
<system.web>
<identity impersonate="true"/>
</system.web>
</configuration>
当然,这将要求模拟的Windows用户也有足够的权限写入Active Directory。