我们有一个身份验证/授权服务,我们需要在 WCF 服务中使用它。我已经实现了自定义客户端/服务凭据,以及相应的令牌和支持类。一切正常,除了一件事。
部分要求是我们可以在服务方法上定义授权角色(通过属性),这些角色将与用户信息一起发送到身份验证服务,该服务以成功/失败消息进行响应。
我尝试实现以下内容:
DispatchOperation operation = OperationContext.Current.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o => o.Action == action);
if (operation != default(DispatchOperation))
{
Type hostType = OperationContext.Current.Host.Description.ServiceType;
MethodInfo method = hostType.GetMethod(operation.Name);
RegistryAuthGroupAttribute authGroupAttribute = (RegistryAuthGroupAttribute)method.GetCustomAttribute(typeof(RegistryAuthGroupAttribute));
if (authGroupAttribute != null)
{
return authGroupAttribute.AuthGroup;
}
}
这将非常好......如果 OperationContext.Current 不总是为空(发现它直到身份验证发生后才会被填充。
在身份验证阶段期间/之前,我是否有任何其他选项可以获取目标端点的 ServiceType?我考虑过使用消息拦截器,但不确定如何获取指定端点的 xml 并使用它来查找 ServiceType。