WCF服务授权管理器设置Thread.CurrentPrincipal

时间:2011-10-19 13:59:20

标签: wcf authorization authentication principal

我有一个自定义ServiceAuthorizationManager,我在其中覆盖CheckAccess并验证属于URL的自定义身份验证令牌。验证后,我使用GenericPrincipal设置Thread.CurrentPrincipal。但是当请求最终到达我的服务方法时,Thread.CurrentPrincipal消失了,它不是我在auth管理器中设置的。 出了什么问题?

2 个答案:

答案 0 :(得分:6)

我通过在注册服务auth管理器的服务行为中设置principalPermissionMode =“None”来解决这个问题。这应该告诉wcf运行时不要在当前线程中放置任何主体。如果将其设置为“custom”,它将覆盖您使用GenericPrincipal设置的任何主体。

答案 1 :(得分:1)

如果您不希望使用内置机制进行授权,WCF要求通过IAuthorizationPolicy标识当前主体,以便在WCF管道中正确集成。您需要指定'Custom'的PrincipalPermissionMode。

有关详细介绍,请参阅此文章:Authorization In WCF-Based Services