我如何解决Kerberos双跳问题?

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

这是我的确切问题:

这工作

工作场景

这不起作用

非工作场景

工作场景和非工作场景的唯一区别在于,工作场景在本地主机上运行应用程序(无论是开发人员的PC还是服务器上的问题),非工作的例子在另一台机器上运行。 这两种情况之间的代码是完全一样的。

我试过了

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

有没有人有任何想法,我可以做什么,以解决这个问题?

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

多数情况下,原因是服务器1不会将委托令牌传递给服务器2.因此,当服务器2尝试使用该身份validation票据去其他地方(可能是SQL服务器)时,它将失败。

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

 ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation 

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