C# 访问WCF ParameterInspector中的ClaimsPrincipal

C# 访问WCF ParameterInspector中的ClaimsPrincipal,c#,wcf,security,wif,claims-based-identity,C#,Wcf,Security,Wif,Claims Based Identity,我正在使用WIF以基于声明的安全性保护我的WCF服务。我想实现一些简单的属性,这些属性可以修饰服务方法,以指定特定操作所需的声明 我首先实现了一个IParameterInspector,我使用一个自定义IServiceBehavior属性应用它: public void ApplyDispatchBehavior( ServiceDescription serviceDescription, ServiceHostBase ser

我正在使用WIF以基于声明的安全性保护我的WCF服务。我想实现一些简单的属性,这些属性可以修饰服务方法,以指定特定操作所需的声明

我首先实现了一个
IParameterInspector
,我使用一个自定义
IServiceBehavior
属性应用它:

public void ApplyDispatchBehavior(
                ServiceDescription serviceDescription, 
                ServiceHostBase serviceHostBase) {

    var parameterInspector = 
        new ClaimsAuthorizationParameterInspector(
           serviceDescription.ServiceType);

    foreach (ChannelDispatcher channelDispatcher in serviceHostBase.ChannelDispatchers) {
        foreach (var endpointDispatcher in channelDispatcher.Endpoints) {
            foreach (DispatchOperation operation in endpointDispatcher.DispatchRuntime.Operations) {
                operation.ParameterInspectors.Add(parameterInspector);
            }
        }
    }

}
在inspector中,我打算查找当前操作的自定义授权属性,然后根据当前标识验证所需的声明。但是,我遇到的问题是,我似乎无法从inspector中访问当前的ClaimsPrincipal。我试过检查:

  • Thread.CurrentPrincipal(设置为GenericPrincipal)
  • OperationContext.Current.ClaimsPrincipal(设置为null)
  • ServiceSecurityContext.Current.PrimaryIdentity(设置为GenericPrincipal)
我已使用
principalPermissionMode=“Always”
配置了服务,并且在我实际输入服务代码时,
线程.CurrentPrincipal
始终正确设置

我如何访问正确的
ClaimsPrincipal
,而不必在管道中的这一点上从传入令牌手动创建它?是否有替代方法可以实现这些属性,而不是使用
参数检测器

是否有替代方法可以实现这些属性 是否使用
参数检测器

对。有特定的扩展点来处理安全决策。你想做的是合理的。。。你只是在错误的地方做

看看