【问题标题】:NTLM as SSO, and Performing Certain Actions as an Impersonated AdministratorNTLM 作为 SSO,并以模拟管理员身份执行某些操作
【发布时间】:2009-10-30 20:35:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net authentication iis-6 ntlm


    【解决方案1】:

    至少有两种选择:

    两者通用:

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

    选项 1:

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

    选项 2:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      最后,这可能有点麻烦,但它应该是 Kerberos 身份验证,而不是 NTLM,因为 NTLM 不允许 constrained delegation 并且如果您的“普通”应用程序访问任何东西,则需要启用委派功能 在本地 IIS 主机之外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2011-03-13
        • 2021-01-31
        • 2011-10-15
        • 1970-01-01
        相关资源
        最近更新 更多