NTLM作为SSO,并作为模拟管理员执行某些操作

时间:2009-10-30 20:35:58

标签: asp.net authentication iis-6 ntlm

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

  1. 内部域上的所有用户都应该能够访问IIS站点(带有NTLM身份验证),并且ASP.NET应用程序应该能够获取当前用户的用户名(又名< strong>用户自我身份验证)。
  2. 正在运行的ASP.NET应用程序应该能够在管理员帐户下执行某些操作。例如,Active Directory更改或将文件写入受限制的位置。
  3. 您可能会猜到,但应用程序的重点是能够让“普通”用户通过Web应用程序进行特定的“管理”更改。同时,应使用“普通”用户的帐户记录更改,因此我不想丢失经过身份验证的用户的凭据。

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

2 个答案:

答案 0 :(得分:1)

至少有两个选择:

两者都很常见:

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

选项1:

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

选项2:

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

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

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

答案 1 :(得分:0)

从安全的角度来看,最好的方法是将所有管理操作分成自己的Web服务,该服务进行身份验证,但不会模拟。您的网站的Normalpart将通过调用Web服务来执行管理操作,就像任何其他客户端一样,即使是本地主机调用。

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

最后,这可能是分裂,但它应该是Kerberos身份验证,而不是NTLM,因为NTLM不允许constrained delegation并且如果访问本地IIS主机外的任何。