У меня есть служба WCF, где я использую пользовательский UserNamePasswordValidator для проверки пользователя.Войти с IAuthorizationPolicy и UserNamePasswordValidator с данными заголовка?
public override void Validate(string userName, string password)
{
LoginHelper loginHelper = new LoginHelper();
loginHelper.ValidateUserRegularLogin(userName, password);
}
Когда это сделано IAuthorizationPolicy.Evaluate срабатывает и это, где я поставил принципала в контекст пользовательского пользователя, как это:
evaluationContext.Properties["Principal"] = userContext;
Проблема заключается в том, что мне нужно 2 вещи, чтобы получить правильный пользовательский текст, и это имя пользователя и значение из заголовка.
Я знаю, что я могу использовать 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);
Один подвох я могу думать в AfterReceiveRequest извлекать значения из заголовка и установить его на claimset идентичности, а затем в Оценивать извлечь его из claimset идентичности и использовать его, как вы. Я не пробовал, но думаю, это должно сработать. –