Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net NTLM作为SSO,并作为模拟管理员执行某些操作_Asp.net_Authentication_Iis 6_Ntlm - Fatal编程技术网

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

Asp.net NTLM作为SSO,并作为模拟管理员执行某些操作,asp.net,authentication,iis-6,ntlm,Asp.net,Authentication,Iis 6,Ntlm,我似乎无法找到IIS/ASP.NET设置的正确组合来完成以下任务: 内部域上的所有用户都应该能够访问IIS站点(通过NTLM身份验证),并且ASP.NET应用程序应该能够获取当前用户的用户名(也称为用户本身已通过身份验证) 正在运行的ASP.NET应用程序应该能够在管理员帐户下执行某些操作。例如,Active Directory更改,或将文件写入受限制的位置 您可能会猜到,但应用程序的要点是能够让“普通”用户通过web应用程序进行特定的“管理”更改。同时,应该使用“普通”用户的帐户记录更改,因此

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

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


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

    至少有两个选项:

    两者都有共同之处:

    • 您的IIS设置应设置为windows身份验证
    • 用户的身份可以从httpcontext中读取
    备选案文1:

    • 将模拟设置为false
    • 将应用程序池的标识设置为有权进行AD更改的用户
    • 将上述用户添加到IIS_WPG组
    备选案文2:

    • 进行广告更改时,将线程的标识设置为允许进行广告更改的用户的标识
    对于选项2,以下是使用模拟用户的代码示例:


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

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

    最后,这可能是吹毛求疵,但它应该是Kerberos身份验证,而不是NTLM,因为NTLM不允许,并且如果您的“正常”应用程序访问本地IIS主机之外的任何内容,则需要启用委派