C# 访问WCF ParameterInspector中的ClaimsPrincipal
我正在使用WIF以基于声明的安全性保护我的WCF服务。我想实现一些简单的属性,这些属性可以修饰服务方法,以指定特定操作所需的声明 我首先实现了一个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
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
,而不必在管道中的这一点上从传入令牌手动创建它?是否有替代方法可以实现这些属性,而不是使用参数检测器
是否有替代方法可以实现这些属性
是否使用参数检测器
对。有特定的扩展点来处理安全决策。你想做的是合理的。。。你只是在错误的地方做
看看