Asp.net 如何解决Kerberos双跳问题?

Asp.net 如何解决Kerberos双跳问题?,asp.net,wcf,impersonation,kerberos,Asp.net,Wcf,Impersonation,Kerberos,我在从web应用程序中调用web服务时遇到一些问题,我希望这里的人能够提供帮助。据我所知,这似乎和Kerberos有关。然而,如果是这样,我不知道该怎么做才能真正解决这个问题。为了让事情变得更困难,我没有对Active Directory帐户进行更改的适当权限,因此我需要知道在请求更改时需要请求什么。在我的情况下,我需要将凭据(集成Windows身份验证)从web应用程序传递到后端web服务,以便web服务在适当的用户上下文下运行 这就是我的问题: 这很有效 这不起作用 工作场景和非工作场景

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

这就是我的问题:

这很有效

这不起作用

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

我尝试过的

  • 将SPN添加到为每个服务器运行应用程序池的域帐户
    setspn-a http/server1 domain\account
  • 不同的模仿方法
  • 使用(…)删除模拟代码
    ,并作为应用程序池帐户执行web服务调用。这正如预期的那样有效

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

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

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

    ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation
    

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

    这就是我上面描述的环境中的解决方案。但是,由于使用了NLB,我们在生产环境中遇到了(现在仍然遇到)相同的问题。我现在正在解决这个问题,但需要建立一个模拟我们的生产环境的测试环境,以便查明确切的原因。你知道在这种情况下该怎么办吗?将SPN添加到运行具有群集名称和FQDN的所有服务的域帐户时,最终会中断所有身份验证。您无法将SPN映射到多个帐户。所有SPN必须在整个森林范围内都是不同的。由于您使用的是负载平衡器,因此可以尝试以下操作:1。将DNS转发到NLB域,将DNS反向到实际服务器。2.将NLB与DNS循环结合使用。这肯定有效。我昨天找到了解决我问题的确切方法。您的建议有助于解决将凭据委派给其他服务器的问题。为了解决NLB问题,在IIS>7中,我必须将“useAppPoolCredentials=true”添加到应用程序的配置中,以使一切都按预期工作。没有这个配置元素,所有的身份验证都被破坏了。太好了,你能为其他用户链接该标志的任何文档吗?@Mr.King,是的。否则你就得不到任何服务票。很酷的图表让问题更容易理解-谢谢!