gpt4 book ai didi

.net - WCF 扩展身份验证

转载 作者:行者123 更新时间:2023-12-02 13:20:54 24 4
gpt4 key购买 nike

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

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

我已成功实现 ServiceAuthenticationManagerServiceAuthorizationManager

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

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

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

最佳答案

正确的做法:

在 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;

关于.net - WCF 扩展身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com