WCF扩展认证

6

我需要扩展内置的WCF身份验证,以便我的新身份验证可以与内置的身份验证并行工作。

例如,我想允许从注册的IP地址(自定义身份验证)或使用用户名+密码(内置身份验证)进行访问。

我已经成功实现了ServiceAuthenticationManagerServiceAuthorizationManager

ServiceAuthenticationManager.Authenticate只是将IPrincipal实现添加到消息属性中,ServiceAuthorizationManager.CheckAccessCoreIPrincipal从传入的消息属性复制到AuthorizationContext属性中。

然而,对于标准机制,ServiceAuthenticationManager.Authenticate完全失效,即使我返回authPolicybase.Authenticate调用的结果也是如此。

也许我走错了方向?添加自定义WCF身份验证的正确方法是什么,不影响现有的身份验证方式?如果自定义身份验证失败,如何回退到内置身份验证?

1个回答

0

正确的方法:

在 OnOpening 重写中设置 ServiceHost

Authorization.PrincipalPermissionMode = PrincipalPermissionMode.Custom;
Authorization.ExternalAuthorizationPolicies = new ReadOnlyCollection<IAuthorizationPolicy>(new[] { new MyCustomAuthorizationPolicy() });

在自定义策略的Evaluate方法中,将评估上下文的三个属性分别赋值给IIdentity的"PrimaryIdentity"、身份集合的"Identities"和IPrincipal的"Principal"。
evaluationContext.Properties["PrimaryIdentity"] = identity;
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity });
evaluationContext.Properties["Principal"] = principal;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接