WCF Double Hop Localhost在第二跳失去模仿

时间:2013-03-18 23:22:31

标签: wcf iis impersonation identity-delegation

我看过很多关于模拟WCF双跳问题的帖子,但是没有一个帖子专门帮助我解决了我的问题。

我错过了什么?为了在服务2上保留我的模拟用户(DOMAIN \ UserName),我还需要做些什么?我正在查看ServiceSecurityContext.Current.WindowsIdentity.Name来确认 - 也许这是错误的。

设置:

  1. 托管在localhost IIS中的客户端应用程序,其中包含对服务1的服务引用 - 模拟WindowsIdentity(DOMAIN \ UserName)
  2. 服务1 - 托管在localhost IIS中的WCF服务,其中包含对服务2的服务引用
  3. 服务2 - 托管在localhost IIS中的WCF服务
  4. 我正在使用所有basicHttpBindings来保持简单。我在两个服务端点都设置了SPN。

    • 我可以成功地进行双跳并且代码执行得很好
    • 在服务1(第1跳)中,我的ServiceSecurityContext.Current.WindowsIdentity是我模拟的人(DOMAIN \ UserName)
    • 在服务2(第2跳)中,我的ServiceSecurityContext.Current.WindowsIdentity是IIS应用程序池用户
    • ImpersonationLevel =“委派”
    • 两个WCF服务都启用了Windows身份验证并禁用了匿名

    **注意:我在开发箱上本地运行这个。即便如此,我的代表团水平已经设定为允许我自己委派自己。也许是矫枉过正。

    绑定(两种服务类似):

    <binding name="...">
        <security mode="TransportCredentialOnly">
             <transport clientCredentialType="Windows" />
        </security>
    </binding>
    

    我在WCF服务客户端和服务端点行为配置上设置了impersonationLevel =“Delegation”。我的服务方法是用impersonationOption =“Allowed”(跳1)和impersonationOption“Required”(跳2)专门修饰的。

1 个答案:

答案 0 :(得分:1)

事实证明,在我的案例中,关键部分是确保设置了以下行为属性:

<serviceAuthorization impersonateCallerForAllOperations="true" />

以前,当我设置此值时,我在Entity Framework中收到错误,因此我解除了设置。看来,在将我的设置与标准实现(如其他varios帖子中所述)对齐的某处,我能够最终设置此属性并使其按预期工作。

编辑: 如果这一切都在本地工作,但在分布式环境中不起作用,请查看此帖子:How can I fix the Kerberos double-hop issue?。您可能需要将机器设置为彼此之间信任委派。