WCF双跳本地主机在第二跳上丢失模拟

WCF双跳本地主机在第二跳上丢失模拟,wcf,iis,impersonation,identity-delegation,Wcf,Iis,Impersonation,Identity Delegation,我已经看过很多关于WCF模拟双跳问题的帖子,但是没有一篇专门帮助我解决我的问题 我错过了什么?我还需要做什么才能在服务2上保留我的模拟用户(域\用户名)?我正在查看ServiceSecurityContext.Current.WindowsIdentity.Name以确认-可能是错误的 设置: 托管在localhost IIS中的客户端应用程序,服务引用为服务1-模拟WindowsIdentity(域\用户名) 服务1-承载在localhost IIS中的WCF服务,服务引用到服务2 服务2-本

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

我错过了什么?我还需要做什么才能在服务2上保留我的模拟用户(域\用户名)?我正在查看ServiceSecurityContext.Current.WindowsIdentity.Name以确认-可能是错误的

设置:

  • 托管在localhost IIS中的客户端应用程序,服务引用为服务1-模拟WindowsIdentity(域\用户名)
  • 服务1-承载在localhost IIS中的WCF服务,服务引用到服务2
  • 服务2-本地主机IIS中承载的WCF服务
  • 我使用所有的BasicHttpBinding来保持简单。我在两个服务端点上都设置了SPN

    • 我可以成功地进行双跳,代码执行得很好
    • 在服务1(跃点1)中,我的ServiceSecurityContext.Current.WindowsIdentity是我模拟的人(域\用户名)
    • 在服务2(跃点2)中,my ServiceSecurityContext.Current.WindowsIdentity是IIS应用程序池用户
    • ImpersonationLevel=“委派”
    • 这两个WCF服务都启用了Windows身份验证并禁用了匿名身份验证
    **注意:我在我的开发盒上本地运行这些。即便如此,我已经将我的授权级别设置为允许从我自己到我自己的授权。也许是杀伤力太大了

    绑定(两种服务类似):

    
    

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

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

    <serviceAuthorization impersonateCallerForAllOperations="true" />
    
    
    
    以前,当我设置这个值时,我在Entity Framework中收到错误,所以我取消了设置。似乎在将我的设置与标准实现(如其他varios文章中所述)相一致的过程中,我最终能够设置此属性并使其按预期工作

    编辑:
    如果这些都在本地工作,但在分布式环境中不起作用,请查看以下帖子:。您可能需要将计算机设置为相互信任委派。

    是否可以显示与您如何设置模拟相关的代码或配置?嗨,Edmund。我已经添加了基本绑定配置。具体来说,您还想看什么?您在哪里配置您的模拟级别?请查看我的最新编辑,这是如何添加到服务1或服务2的?在我的案例中是服务2和1。请参阅我的附加答题。你可能会发现自己有第二个问题。
    <serviceAuthorization impersonateCallerForAllOperations="true" />