我有一个调用WCF服务的Winform应用程序。问题是这个服务(A)自称为另一个(B),它想要访问初始调用者的 ServiceSecurityContext.Name (Winform的身份)。
两者都托管在IIS上并使用NetTcpBinding。
我尝试在服务B方法上添加此属性:
[OperationBehavior(TransactionScopeRequired = true,Impersonation=ImpersonationOption.Allowed)]
我在服务A上添加了Endpoint的行为:
<endpointBehaviors>
<behavior name="impBehavior">
<clientCredentials>
<windows allowedImpersonationLevel="Impersonation" />
</clientCredentials>
</behavior>
但这不起作用。我该怎么办?
最好的考虑,
斯特凡。
答案 0 :(得分:0)
在您的情况下,我认为应该要求假冒,而不是简单地允许。
实现这一目标的最简单方法是使用此元素在服务B配置文件中添加服务行为:
<serviceAuthorization impersonateCallerForAllOperations="true" />
答案 1 :(得分:0)
如果服务B位于不同的服务器上,那么服务A,这将不起作用,因为假定不能“双跳”而没有给予服务器的特定AD权限(管理员通常不会发出因为他们有重要的安全隐患)。
如果A和B在同一台服务器上,那么如果A的B调用设置为使用模拟(并且对A的调用允许),它应该有效。
答案 2 :(得分:0)
我终于解决了这个问题。问题是我在错误的地方配置了客户端的端点行为。
应该在Winform级别(服务A作为客户端)配置,而不是服务本身(服务B作为客户端)。
现在一切正常。
感谢您的帮助。
GTZ, 斯特凡。