WCF扩展身份验证

时间:2012-04-30 14:42:51

标签: .net wcf wcf-security

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

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

我已成功实施ServiceAuthenticationManagerServiceAuthorizationManager

ServiceAuthenticationManager.Authenticate只是将IPrincipal实施添加到邮件属性,ServiceAuthorizationManager.CheckAccessCoreIPrincipal从传入邮件属性复制到AuthorizationContext属性。

但是,即使我返回ServiceAuthenticationManager.AuthenticateauthPolicy调用的结果,base.Authenticate也会因标准机制而完全中断。

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

1 个答案:

答案 0 :(得分:0)

正确方法:

在OnOpening覆盖中设置ServiceHost

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

在自定义策略的Evaluate方法中,分配评估上下文的三个属性&#34; PrimaryIdentity&#34;到IIdentity,&#34;身份&#34;收集身份和&#34;校长&#34;到IPrincipal

evaluationContext.Properties["PrimaryIdentity"] = identity;
evaluationContext.Properties["Identities"] = new List<IIdentity>(new[] { identity });
evaluationContext.Properties["Principal"] = principal;