0

我似乎无法偶然发现 IIS / ASP.NET 设置的正确组合来完成以下操作:

  1. 内部域上的所有用户都应该能够访问 IIS 站点(w/NTLM 身份验证),并且 ASP.NET 应用程序应该能够获取当前用户的用户名(也就是用户通过自己的身份验证)。
  2. 正在运行的 ASP.NET 应用程序应该能够在管理员帐户下执行某些操作。例如,Active Directory 更改或将文件写入受限位置。

您可能会猜到,但该应用程序的重点是能够让“普通”用户通过 Web 应用程序进行特定的“管理”更改。同时,应该使用“普通”用户的帐户记录更改,所以我不想丢失经过身份验证的用户的凭据。

查找 IIS6 中的特定设置以完成 #1(域中的任何用户都可以访问该站点并以他们自己的身份进行身份验证),以及 #2 的代码。

4

2 回答 2

1

至少有两种选择:

两者的共同点:

  • 您的 IIS 设置应设置为 Windows 身份验证。
  • 可以从 httpcontext 中读取用户的身份。

选项1:

  • 设置模拟 = false
  • 将应用程序池的身份设置为有权进行 AD 更改的用户
  • 将上述用户添加到 IIS_WPG 组

选项 2:

  • 进行 AD 更改时,将线程的身份设置为允许进行 AD 更改的用户的身份

对于选项 2,这是一个使用模拟用户的代码示例:

http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx

于 2009-10-30T21:04:30.340 回答
0

从安全的角度来看,最好的方法是将所有管理操作分离到它自己的 Web 服务中,该服务会进行身份验证,但不会进行模拟。站点的 Normal 部分将通过调用 Web 服务来执行管理操作,就像任何其他客户端一样,即使是 localhost 调用。

通过这种方式,您可以在普通应用程序池(模拟)和特权应用程序池(管理)之间实现隔离。

Finally, this is perhaps splitting hairs, but it should be Kerberos authentication, not NTLM, because NTLM does not allow for constrained delegation and your 'normal' application will need to be enabled for delegation if it accesses anything outside the local IIS host.

于 2009-10-30T21:07:42.627 回答