WCF中基于角色的安全性是否依赖于实例模式?

时间:2011-08-11 14:23:03

标签: wcf wcf-instancing

我们正在使用UserNamePasswordValidatorIAuthorizationPolicy将自定义角色数据加载到IPrincipal对象中,以便在我们的服务器端进行身份验证和一些业务级别权限。

因此,我们在服务操作中使用Thread.CurrentPrincipal来测试权限等。冒着比我应该更多技术的风险,这是static类的Thread属性这意味着它有 实例范围 全局 scpope(呃,谢谢Thilak)。我是否应该因为性能原因将我的InstanceContextMode更改为Single,这个方案肯定会破坏?我知道Single要求您编写线程安全的代码,因此本身不仅仅是配置更改。

在我需要关注此问题之前,您是否还请分享任何关于WCF应该能够处理的实例加载的权威文本的链接?

1 个答案:

答案 0 :(得分:0)

这是一个链接

http://msdn.microsoft.com/en-us/magazine/cc948343.aspx

这是我的2美分:

Thread.CurrentPrincipal是静态的。这意味着它具有全局范围而不是实例范围。但是,它也恰好具有线程亲和性...即该属性标记为[ThreadStatic] ...这意味着它具有全局范围,仅适用于当前线程。这在你的场景中是个好消息,因为使用Thread.CurrentPrincipal的代码不需要改变你是否处于单例模式。

P.S。检查IAuthorizationPolicy运行的Thread上下文。我在过去通过一些疯狂的,注入的安全策略设置Thread.CurrentPrincipal,明确地回忆起了痛点。确保您的IAuthorizationPolicy中运行的线程与调用Service方法的线程相同。