【问题标题】:Kerberos authentication in IIS 7IIS 7 中的 Kerberos 身份验证
【发布时间】:2011-04-16 02:10:10
【问题描述】:

我们有一些使用集成 Windows 身份验证在虚拟目录中设置的 Web 内容。虚拟目录在使用自定义身份(自定义用户帐户)的应用程序池下运行。问题是 NTLM 身份验证有效,但 Kerberos 身份验证无效。这是在 IIS 6 下工作的相同配置,但我们需要迁移到 IIS 7 并且 Kerberos 身份验证不起作用。

以下是有关我的环境的更多信息:

虚拟目录身份验证设置:

  • 除 Windows 身份验证外,所有功能均已禁用
  • 启用内核模式身份验证:已启用

应用程序池设置:

  • 托管管道模式:经典
  • 身份:自定义本地用户

Web.config 设置:

  • 身份验证模式 = "Windows"
  • system.serviceModel/bindings/basicHttpBinding/binding/security/mode = TransportCredentialOnly
  • system.serviceModel/bindings/basicHttpBinding/binding/security/transport/clientCredentailType = Windows
  • serviceHostingEnvironment/aspNetCompatibilityEnabled = true

虚拟目录权限:

  • 自定义本地组:我们将域用户添加到本地组以访问服务

操作系统设置:

  • IIS 7
  • Windows Server 2008 x64 标准 SP2

这是我从 fiddler 那里得到的比较 IIS 6 和 IIS 7 的分析。Kerberos 身份验证在 IIS 6 中运行良好,应用程序池以自定义身份运行。

参考(IIS 6)(作品):

提琴手:

(使用域\用户)

请求 1(无身份验证)

No Proxy-Authorization Header is present.
No Authorization Header is present.

响应 1 (401)(挑战)

No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM

请求 2(Kerberos 票证)

Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>

响应 2 (401)(Kerberos 回复)

WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>

请求 3(Kerberos 票证)

Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>

响应 3 (401)(Kerberos 回复)

WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>

请求 4(Kerberos 票证)

Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>

响应 4 (200)(Kerberos 回复)

WWW-Authenticate Header (Negotiate) appears to be a Kerberos reply:
<data>

交易完成,浏览器显示页面。


(IIS 7)(不起作用):

提琴手:

(使用域\用户)

请求 1(无身份验证)

No Proxy-Authorization Header is present.
No Authorization Header is present.

响应 1 (401)(协商)

No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM

请求 2(Kerberos 票证)

Authorization Header (Negotiate) appears to contain a Kerberos ticket:
<data>

响应 2 (401)(协商)

No Proxy-Authenticate Header is present.
WWW-Authenticate Header is present: Negotiate
WWW-Authenticate Header is present: NTLM

请注意,IIS 7 在响应 2 中不接受我的 Kerberos 票证。知道为什么不?我是否需要重新配置 IIS 7 中的某些内容才能使 Kerberos 身份验证正常工作?

【问题讨论】:

    标签: wcf authentication iis-7 kerberos ntlm


    【解决方案1】:

    分辨率

    为了让 IIS 7 像 IIS 6 一样协商身份验证,我必须将 applicationHost.config 文件中我的虚拟目录的 windowsAuthentication 元素的 useAppPoolCredentials 设置为 true。这是通过执行以下任一命令完成的:

    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/authentication/windowsAuthentication -useAppPoolCredentials:true
    

    申请个人申请:

    第一次解锁:

    %windir%\system32\inetsrv\appcmd.exe unlock config /section:windowsAuthentication
    

    然后申请:

    %windir%\system32\inetsrv\appcmd.exe set config "Default Web Site/myApp/" /section:windowsAuthentication -useAppPoolCredentials:true
    

    注意 - 这实际上不会使 Kerberos 工作。它使 IIS 7 的行为类似于 IIS 6。这意味着如果服务器和客户端之间的 Kerberos 协商失败,那么服务器会自动回退到 NTLM。这实际上是使身份验证为我工作的原因 (NTLM)。

    【讨论】:

    • 哇哦..谢谢!!我搜索了很多 SO 文章(以及网络上的其他地方),这终于解决了我的问题。
    【解决方案2】:

    您是否使用 Negotiate:Kerberos 提供程序进行 Windows 身份验证?如果 Kerberos 存在问题,您可以通过在客户端上运行Network Monitor(或类似WireShark)在尝试进行身份验证时获得有关该问题的更多详细信息。查看 Internet Explorer 进程中的消息,您可能会看到一些 Kerberos 运行情况。

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多