6

我需要扩展内置 WCF 身份验证,因此我的新身份验证应该与内置身份验证并排工作。

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

我已经成功实施ServiceAuthenticationManagerServiceAuthorizationManager.

ServiceAuthenticationManager.Authenticate只需将IPrincipal实现添加到消息属性,从传入消息属性ServiceAuthorizationManager.CheckAccessCore复制到属性。IPrincipalAuthorizationContext

但是,ServiceAuthenticationManager.Authenticate即使我返回authPolicybase.Authenticate调用结果,对于标准机制也是完全破坏的。

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

4

1 回答 1

0

正确做法:

在 OnOpening 覆盖中设置 ServiceHost

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

在自定义策略的 Evaluate 方法中,将评估上下文“PrimaryIdentity”的三个属性分配给 IIdentity,将“Identities”分配给身份集合,将“Principal”分配给 IPrincipal

evaluationContext.Properties["PrimaryIdentity"] = identity;
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity });
evaluationContext.Properties["Principal"] = principal;
于 2012-05-23T16:42:40.200 回答