传播ServiceSecurityContext

时间:2011-02-01 10:10:28

标签: .net wcf wcf-security impersonation

我有一个调用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>

但这不起作用。我该怎么办?

最好的考虑,

斯特凡。

3 个答案:

答案 0 :(得分:0)

在您的情况下,我认为应该要求假冒,而不是简单地允许。

实现这一目标的最简单方法是使用此元素在服务B配置文件中添加服务行为:

<serviceAuthorization impersonateCallerForAllOperations="true" />

答案 1 :(得分:0)

如果服务B位于不同的服务器上,那么服务A,这将不起作用,因为假定不能“双跳”而没有给予服务器的特定AD权限(管理员通常不会发出因为他们有重要的安全隐患)。

如果A和B在同一台服务器上,那么如果A的B调用设置为使用模拟(并且对A的调用允许),它应该有效。

答案 2 :(得分:0)

我终于解决了这个问题。问题是我在错误的地方配置了客户端的端点行为。

应该在Winform级别(服务A作为客户端)配置,而不是服务本身(服务B作为客户端)。

现在一切正常。

感谢您的帮助。

GTZ, 斯特凡。