【问题标题】:Accessing a ClaimsPrincipal in a WCF ParameterInspector在 WCF ParameterInspector 中访问 ClaimsPrincipal
【发布时间】:2014-06-26 02:01:11
【问题描述】:

我正在使用 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);
            }
        }
    }

}

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

  • Thread.CurrentPrincipal(设置为 GenericPrincipal)
  • OperationContext.Current.ClaimsPrincipal(设置为 null)
  • ServiceSecurityContext.Current.PrimaryIdentity(设置为 GenericPrincipal)

我已经使用principalPermissionMode="Always" 配置了服务,并且在我实际输入服务代码时,Thread.CurrentPrincipal 始终正确设置。

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

【问题讨论】:

    标签: c# wcf security wif claims-based-identity


    【解决方案1】:

    是否有替代方法可以实现这些属性 使用ParameterInspector

    是的。有特定的扩展点来处理安全决策。您尝试做的事情是合理的……您只是在错误的地方做。

    看看How to: Create a Custom Authorization Manager for a Service

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多