我正在使用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
?