2010-09-07 4 views
1

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

Спасибо за ваше время.

+1

Вашего валидатор, безусловно, неправильно, так как это требует доступа к открытому тексту паролю пользователя. Подавляющее большинство схем аутентификации (дайджест, NTLM, Kerberos, OAuth) никогда не пропускают пароль в виде открытого текста, они устанавливают права доступа к паролю через вызовы и ответы на дайджест (т. Е. Через хэши). –

ответ

1

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

Я думаю, что вам нужно реализовать пользовательскую аутентификацию и авторизацию, и это не так просто: WCF Authorizaton, Custom Authorization, Custom credentials and validation

+0

Большое спасибо за эти ключевые слова. Я считаю, что сейчас я на правильном пути, чтобы решить эту проблему. Я надеюсь полностью ответить на этот вопрос позже сегодня, и я напишу свой ответ здесь. –

Смежные вопросы

 Смежные вопросы