2013-03-18 47 views
2

我见过很多关于WCF模拟双跳问题的文章,但他们都没有专门帮助我解决我的问题。WCF双跳本地主机丢失第二跳假冒

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

的设置:

  1. 客户端应用托管在本地主机与服务参考IIS到服务1 - 冒充的WindowsIdentity(域\用户名)
  2. 服务1 - WCF服务托管在本地主机IIS与服务引用到服务2
  3. 服务2 - WCF服务托管在本地主机IIS

我使用ALL basicHttpBindings让事情变得简单。我已经在两个服务端点上设置了SPN。

  • 我可以成功地使双跳和代码执行就好
  • 在服务1(跳1)我的ServiceSecurityContext.Current.WindowsIdentity是我假冒的人(域\用户名)
  • 在服务2(跳2),我ServiceSecurityContext.Current.WindowsIdentity是IIS应用程序池用户
  • ImpersonationLevel = “委派”
  • 两个WCF服务的Windows认证功能和匿名残疾人

**注意:我在我的开发箱上全部在本地运行。即便如此,我的代表团级别也允许我自己的代表团参加。也许矫枉过正。

绑定(两种服务类似):

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

我已经设置impersonationLevel =“委派” WCF服务客户端和服务端点行为的配置上都。我的服务方法特别用impersonationOption =“Allowed”(跳1)和impersonationOption“必需”(跳2)装饰。

+0

是否可以显示与您如何设置模拟相关的代码或配置? – EdmundYeung99 2013-03-19 00:31:04

+0

嗨埃德蒙。我已经添加了基本的绑定配置。具体来说,你还有什么兴趣看到? – chrisriesgo 2013-03-19 00:46:46

+0

你在哪里配置你的模拟级别? – EdmundYeung99 2013-03-19 03:43:07

回答

1

事实证明,在我的情况是确保以下行为属性的关键部分被设置:

<serviceAuthorization impersonateCallerForAllOperations="true" /> 

以前,当我设置这个值,我收到了实体框架中的错误,所以我解开了那个设定。看起来,沿着将我的设置与标准实现(如其他varios文章中所述)对齐的路线,我终于可以设置此属性并使其按预期工作。

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

+1

添加到服务1或服务2的内容是什么? – 2013-09-11 20:10:54

+0

服务2和1在我的情况。请参阅我的其他答案。你可能会发现第二个问题。 – chrisriesgo 2013-09-12 00:18:47