Сегодня я применил собственный поставщик проверки подлинности для своей службы WCF. Он может определить, действителен ли мой пользователь или нет, как и ожидалось.Получение текущего пользователя, прошедшего проверку подлинности, в службе WCF
Итак, теперь у меня есть этот класс:
public class MyCustomValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
User apiUser = User.Login(userName, password);
// other logic goes here.
}
}
Поведение моего приложения зависит от того, какие объекты пользователь может получить доступ. Итак, как я могу получить свой объект User отсюда до моего класса обслуживания? Нет очевидного способа, который я вижу, поскольку мой класс обслуживания не наследует ни от чего по умолчанию, в отличие от контроллеров ASP.NET.
Мой первый инстинкт - установить статический параметр в MyCustomValidator, а затем прочитать его оттуда, но я подозреваю, что может возникнуть условие гонки. Может ли кто-нибудь подтвердить или опровергнуть мои подозрения?
И самое главное: есть ли лучший способ сделать это? Это первый раз, когда я когда-либо пользовался WCF, поэтому я не знаю о лучших практиках, которые здесь задействованы.
Спасибо за ваше время.
Вашего валидатор, безусловно, неправильно, так как это требует доступа к открытому тексту паролю пользователя. Подавляющее большинство схем аутентификации (дайджест, NTLM, Kerberos, OAuth) никогда не пропускают пароль в виде открытого текста, они устанавливают права доступа к паролю через вызовы и ответы на дайджест (т. Е. Через хэши). –