我有一个自定义 ServiceAuthorizationManager,我在其中覆盖 CheckAccess 并验证作为 URL 一部分的自定义身份验证令牌。验证后,我将 Thread.CurrentPrincipal 设置为 GenericPrincipal。但是当请求最终到达我的服务方法时,Thread.CurrentPrincipal 消失了,这不是我在身份验证管理器中设置的。怎么了?
问问题
3474 次
2 回答
6
我通过在注册服务身份验证管理器的服务行为中设置 principalPermissionMode="None" 来解决这个问题。这应该告诉 wcf 运行时不要将任何主体放在当前线程中。如果您将其设置为“自定义”,它会覆盖您使用 GenericPrincipal 设置的任何主体。
于 2011-10-21T18:40:38.417 回答
1
如果您不希望使用内置机制进行授权,WCF 要求通过 IAuthorizationPolicy 标识当前主体,以便正确集成到 WCF 管道中。您将需要指定“自定义”的 PrincipalPermissionMode。
详细介绍请看这篇文章:基于 WCF 的服务中的授权
于 2011-10-20T02:00:41.917 回答