【问题标题】:How can I fix the Kerberos double-hop issue?如何解决 Kerberos 双跳问题?
【发布时间】:2013-02-02 09:56:33
【问题描述】:

我在从 Web 应用程序中调用 Web 服务时遇到了一些问题,我希望这里的人能够提供帮助。据我所知,这似乎与 Kerberos double-hop issue 有关。但是,如果是这样,我不确定该怎么做才能真正解决问题。更难的是,我没有适当的权限来更改 Active Directory 帐户,因此我需要知道在请求更改时要询问什么。在我的情况下,我需要将凭据(集成 Windows 身份验证)从 Web 应用程序传递到后端 Web 服务,以便 Web 服务在正确的用户上下文下运行。

这是我的确切问题:

这行得通

这不起作用

工作场景和非工作场景之间的唯一区别在于,工作场景是在本地主机上运行应用程序(无论是开发人员的 PC 还是在相关的服务器上),而非工作场景是在本地主机上运行应用程序。工作示例正在另一台机器上运行。两种场景之间的代码完全相同。

我的尝试

  1. 为每个服务器运行应用程序池的域帐户添加 SPN setspn -a http/server1 DOMAIN\account
  2. 不同的模仿方法
  3. 删除模拟代码using(...) 并作为应用程序池帐户执行Web 服务调用。这按预期工作。

有没有人知道我可以做些什么来解决这个问题?

【问题讨论】:

  • 酷图让问题更容易理解 - 谢谢!

标签: asp.net wcf impersonation kerberos


【解决方案1】:

原因通常是服务器 1 没有将委托令牌传递给服务器 2。因此,当服务器 2 尝试使用该身份验证票证前往其他地方(可能是 SQL 服务器)时,它会失败。

您应该为 WCF 调用设置模拟级别

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

http://msdn.microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx

【讨论】:

    【解决方案2】:

    必须信任中间服务器才能进行委派。否则不会委托任何凭据,并且中间服务器无法模拟原始客户端。

    【讨论】:

    • 这最终成为我上面描述的环境中的解决方案。但是,由于使用了 NLB,我们在生产环境中遇到(并且仍在遇到)同样的问题。我现在正在解决这个问题,但需要设置一个模拟我们的生产环境的测试环境,以便查明确切的原因。你有机会知道在这种情况下该怎么做吗?将 SPN 添加到运行具有集群名称和 FQDN 的所有服务的域帐户最终会破坏所有身份验证。
    • 您不能将一个 SPN 映射到多个帐户。所有 SPN 在整个森林范围内都必须是不同的。由于您在负载平衡器后面,您可以尝试以下操作: 1. 将 DNS 转发到 NLB 域,将 DNS 反向到实际服务器。 2. 将 NLB 与 DNS 循环结合使用。这肯定有效。
    • 我昨天找到了我的问题的exact。您的建议有助于解决将凭据委派给另一台服务器的问题。为了解决 NLB 问题,在 IIS > 7 中,我必须将“useAppPoolCredentials = true”添加到应用程序的配置中,以使一切按预期工作。如果没有该配置元素,所有身份验证都会被破坏。
    • 太好了,您可以为其他用户链接该标志的任何文档吗?
    • @Mr.King,是的。否则您将无法获得任何服务票。
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 2011-12-21
    • 1970-01-01
    • 2011-08-13
    • 2023-03-26
    • 2023-04-08
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多