【发布时间】: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