使用带有标头数据的 IAuthorizationPolicy 和 UserNamePasswordValidator 登

本文关键字:IAuthorizationPolicy UserNamePasswordValidator 数据 | 更新日期: 2023-09-27 18:35:47

我有一个WCF服务,我使用自定义UserNamePasswordValidator来验证用户。

public override void Validate(string userName, string password)
        {
            LoginHelper loginHelper = new LoginHelper();
            loginHelper.ValidateUserRegularLogin(userName, password);
        }

完成此操作后,将触发IAuthorizationPolicy.Evaluate,这是我将主体设置为自定义用户上下文的地方,如下所示:

evaluationContext.Properties["Principal"] = userContext;

问题是我需要 2 件事来获取正确的用户上下文,这是用户名和标头中的值。

我知道我可以使用消息检查器来获取标头数据,如下所示:

public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            IntegrationHeader integrationHeader;
            LoginHandler loginHandler;
            UserContextOnService userContext = null;
            if (request.Headers.Action == null || request.Headers.Action.ToString().Length < 1)
                return null;
            foreach (var header in request.Headers)
            {
                if (header.Namespace == "ns" && header.Name == "SecurityToken")
                {
                    return null;
                }
            }
            throw new SecurityTokenException("Unknown username or invalid password");
        }

但是我需要在 Evaluate 方法中获取此信息,以便我可以进行正确的登录(设置主体)。可能吗?如果是这样,如何?还有什么选择?

附言。这将通过调用完成,因此无法使用特定的登录方法。

解决:

我最终得到了这个:

integrationHeader = OperationContext.Current.IncomingMessageHeaders.GetHeader<IntegrationCertificateHeader>(header.Name, header.Namespace);

使用带有标头数据的 IAuthorizationPolicy 和 UserNamePasswordValidator 登

您可以尝试使用此访问标头数据吗?

WebOperationContext.Current.IncomingRequest.Headers 
相关文章:
  • 没有找到相关文章