我看过很多关于模拟WCF双跳问题的帖子,但是没有一个帖子专门帮助我解决了我的问题。
我错过了什么?为了在服务2上保留我的模拟用户(DOMAIN \ UserName),我还需要做些什么?我正在查看ServiceSecurityContext.Current.WindowsIdentity.Name来确认 - 也许这是错误的。
设置:
我正在使用所有basicHttpBindings来保持简单。我在两个服务端点都设置了SPN。
**注意:我在开发箱上本地运行这个。即便如此,我的代表团水平已经设定为允许我自己委派自己。也许是矫枉过正。
绑定(两种服务类似):
<binding name="...">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
我在WCF服务客户端和服务端点行为配置上设置了impersonationLevel =“Delegation”。我的服务方法是用impersonationOption =“Allowed”(跳1)和impersonationOption“Required”(跳2)专门修饰的。
答案 0 :(得分:1)
事实证明,在我的案例中,关键部分是确保设置了以下行为属性:
<serviceAuthorization impersonateCallerForAllOperations="true" />
以前,当我设置此值时,我在Entity Framework中收到错误,因此我解除了设置。看来,在将我的设置与标准实现(如其他varios帖子中所述)对齐的某处,我能够最终设置此属性并使其按预期工作。
编辑: 如果这一切都在本地工作,但在分布式环境中不起作用,请查看此帖子:How can I fix the Kerberos double-hop issue?。您可能需要将机器设置为彼此之间信任委派。