传播 ServiceSecurityContext
Posted
技术标签:
【中文标题】传播 ServiceSecurityContext【英文标题】:Propagate ServiceSecurityContext 【发布时间】:2011-02-01 10:10:27 【问题描述】:我有一个调用 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>
但这不起作用。我能做什么?
最好的尊重,
史蒂芬。
【问题讨论】:
【参考方案1】:在您的情况下,我认为应该要求而不是简单地允许冒充。
实现这一点的最简单方法是在您的服务 B 配置文件中添加一个服务行为,其中包含以下元素:
<serviceAuthorization impersonateCallerForAllOperations="true" />
【讨论】:
【参考方案2】:如果服务 B 与服务 A 位于不同的服务器上,这将不起作用,因为如果没有为服务器提供非常特定的 AD 特权(管理员通常不会放弃,因为他们有重大安全隐患)。
如果 A 和 B 在同一台服务器上,那么如果 A 对 B 的调用设置为使用模拟(并且对 A 的调用允许它),它应该可以工作。
【讨论】:
【参考方案3】:我终于解决了这个问题。问题是我在错误的地方配置了客户端的端点行为。
它应该在 Winform 的级别(以服务 A 作为客户端)而不是在服务本身(以服务 B 作为客户端)进行配置。
现在一切正常。
感谢您的帮助。
Gtz, 斯蒂芬。
【讨论】:
以上是关于传播 ServiceSecurityContext的主要内容,如果未能解决你的问题,请参考以下文章