Получение аутентифицированного пользователя в службе WCF - PullRequest
1 голос
/ 07 сентября 2010

Сегодня я реализовал пользовательский поставщик аутентификации для моей службы 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, поэтому я не знаю, какие здесь лучшие практики.

Спасибо, что уделили время.

1 Ответ

1 голос
/ 07 сентября 2010

Вы хотите передать некоторые данные из валидатора в экземпляр сервиса.Это плохо, потому что ты не можешь этого сделать.UserNamePasswordValidator предназначен только для проверки учетных данных (имя пользователя и пароль).У вас нет доступа к чему-либо из вашего валидатора.Он даже не видит текущий контекст операции, потому что работает в другом потоке.Использование статических параметров не является пустым занятием - как вы упомянули, это условие гонки.

Я думаю, вам нужно реализовать собственную аутентификацию и авторизацию, а это непросто: WCF Authorizaton , Пользовательская авторизация , Пользовательские учетные данные и проверка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...