我在Web应用程序中调用Web服务时遇到了一些问题,我希望有人能够提供帮助。据我所知,这个似乎与Kerberos double-hop issue有关。但是,如果是,我不知道该怎么做才能真正解决问题。为了使事情更难,我没有适当的权限来更改Active Directory帐户,因此我需要知道在请求更改时要求的内容。在我的情况下,我需要将凭据(集成Windows身份验证)从Web应用程序传递到后端Web服务,以便Web服务在适当的用户上下文中运行。
这是我的确切问题:
此作品
这不起作用
工作方案和非工作方案之间仅的区别在于工作方案是在localhost上运行应用程序(无论是开发人员的PC还是在相关服务器上)和非工作示例正在另一台机器上运行。两种情况之间的代码完全相同。
我尝试了什么
setspn -a http/server1 DOMAIN\account
using(...)
并将网络服务调用作为应用程序池帐户执行。这可以按预期工作。有没有人知道我可以做些什么来解决这个问题?
答案 0 :(得分:13)
必须信任中间服务器才能进行委派。否则,将不委托凭证,并且中间服务器无法模拟原始客户端。
答案 1 :(得分:3)
原因通常是服务器1没有将委托令牌传递给服务器2.因此,当服务器2尝试使用该身份验证票证到其他地方(可能是SQL服务器)时,它会失败。
您应该为WCF调用设置模拟级别
ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation