Войти с помощью IAuthorizationPolicy и UserNamePasswordValidator с данными заголовка?
У меня есть служба 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 вещи, чтобы получить правильный user context, и это имя пользователя и значение из заголовка.
Я знаю, что могу использовать messageinspector, чтобы получить данные заголовка следующим образом:
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, чтобы я мог сделать правильный вход в систему (установить принципал). Является ли это возможным? И если да, то как? Какая альтернатива?
PS. Это будет сделано по вызову, поэтому никакой конкретный метод входа в систему не может быть использован.
Решено:
Я закончил с этим:
integrationHeader = OperationContext.Current.IncomingMessageHeaders.GetHeader<IntegrationCertificateHeader>(header.Name, header.Namespace);
1 ответ
Можете ли вы попытаться получить доступ к данным заголовка с этим?
WebOperationContext.Current.IncomingRequest.Headers