IIS应用程序池标识使用登录用户的Windows标识

3
我正在开发一个使用LDAP执行Active Directory更新的Web应用程序。当我将该应用程序托管在IIS 7上时,在directoryEntry.CommitChanges();语句处出现“访问被拒绝”错误。
然后我发现应用程序池使用身份“ IIS APPPOOL \ ASP.NET v4.0”执行更新。
我需要使用Web应用程序的用户的Windows帐户作为应用程序池的标识。
我已经完成了以下操作:
  1. 在web.config中添加> authentication mode="Windows"
  2. 在IIS上禁用匿名身份验证
  3. 选择内置帐户“ApplicationPoolIdentity”作为应用程序池的标识
但仍未使其正常工作。
2个回答

4
您所需要的概念被称为“模拟身份”(Impersonation)。
以下是来自文档的相关内容:
  1. 打开 IIS Manager,并导航到您想要管理的级别。有关打开 IIS Manager 的信息,请参阅打开 IIS Manager (IIS 7)。有关在 UI 中导航到位置的信息,请参阅 Navigation in IIS Manager (IIS 7)。
  2. 在“特性视图”中,双击“身份验证”。
  3. 在“身份验证”页面上,选择ASP.NET 模拟身份
  4. 在“操作”窗格中,单击“启用”,以使用默认设置对 ASP.NET 模拟身份进行身份验证。
  5. 可选地,在“操作”窗格中,单击“编辑”以设置安全主体。
  6. 在“编辑 ASP.NET 模拟身份设置”对话框中,选择“指定用户”或“已验证用户”。无论您决定使用哪种身份标识,IIS 都将使用该标识作为 ASP.NET 应用程序的安全上下文。默认情况下,IIS 7 设置为模拟已验证用户。
  7. 单击“确定”以完成设置或继续执行下一个可选步骤以更改模拟身份的标识。
  8. 可选地,单击“设置”以更改指定用户的身份标识。
  9. 在“设置凭据”对话框中,在“用户名”中输入现有用户帐户的名称,在“密码”中输入与该用户帐户相关联的密码,然后在“确认密码”中输入相同的值作为 IIS 用于匿名访问的新帐户。
  10. 单击“确定”关闭“设置凭据”对话框。
  11. 单击“确定”关闭“编辑 ASP.NET 模拟身份设置”对话框。

2
嗨,谢谢你的建议。<br> 我已经尝试过了,当我检查"System.Security.Principal.WindowsIdentity.GetCurrent().Name"的值时,仍然显示"IIS APPPOOL\ASP.NET v4.0",这意味着应用程序仍然使用IIS APPPOOL身份来运行Web应用程序,而不是已登录用户的Windows帐户。<br> 这是我现在使用的IIS身份验证和模拟设置的屏幕截图:https://image.ibb.co/bVaNXv/IIS_Authentication.png - undefined
我还尝试在web.config中使用"identity impersonate=true",但也没有起作用。 - undefined

1
在我的配置中,它使用活动目录帐户进行日志记录,System.Security.Principal.WindowsIdentity.GetCurrent().Name 的结果是已认证会话。
<identity impersonate="true"/>
<authentication mode="Windows">
  <forms name="Login" loginUrl="Login.aspx" path="/" timeout="10"/>
</authentication>
<authorization>
  <deny users="?"/>
  <allow users="*"/>
</authorization>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接