2014-06-25 17 views
0

我正在使用WIF來保護基於聲明的安全性的WCF服務。我想實現一些簡單的屬性,可以修飾服務方法來指定特定操作所需的聲明。在WCF ParameterInspector中訪問ClaimsPrincipal

我已經通過實現我申請使用自定義IServiceBehavior屬性的IParameterInspector開始:

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

回答