如何修复Kerberos双跳问题?

时间:2013-02-18 01:51:20

标签: asp.net wcf impersonation kerberos

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

这是我的确切问题:

此作品

Working scenario

这不起作用

Non-working scenario

工作方案和非工作方案之间的区别在于工作方案是在localhost上运行应用程序(无论是开发人员的PC还是在相关服务器上)和非工作示例正在另一台机器上运行。两种情况之间的代码完全相同。

我尝试了什么

  1. 将SPN添加到为每个服务器运行应用程序池的域帐户setspn -a http/server1 DOMAIN\account
  2. 不同的冒充方法
  3. 删除模拟代码using(...)并将网络服务调用作为应用程序池帐户执行。这可以按预期工作。
  4. 有没有人知道我可以做些什么来解决这个问题?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:3)

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

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

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

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