2010-03-30 3 views
4

Я разрабатываю службу WCF, которая получает учетные данные пользователя в заголовке SOAP. Эти учетные данные читаются на стороне сервера с помощью MessageInspector. Все идет нормально.Установка идентификатора/принципала из MessageInspector в WCF

Я хочу установить Thread.CurrentPrincipal для пользовательского принципала (CustomPrincipal), но когда я это сделаю из MessageInspector, он становится переопределенным к моменту запуска службы. Когда самое лучшее время для установки принципала? Также каков наилучший способ передачи принципала, удостоверения личности или учетных данных от инспектора до этого места?

ответ

1

IIRC, для этого вам необходимо установить режим основного разрешения на «пользовательский» и использовать политику авторизации, like so. Насколько мне известно, звонок в IAuthorizationPolicy.Evaluate - это единственное место, где вы ожидаете установить принципал, и когда я попробовал это без, используя IAuthorizationPolicy, он отбросил моего принципала (что имеет смысл, поскольку нет никакой гарантии, что WCF будет используйте тот же поток в каждой точке трубопровода).

+0

Где находится идентификатор IIdentity в EvaluationContext? Мне нужно выяснить, какие учетные данные передаются в заголовке. –

+0

@Robert - Извините, это было буквально с тех пор, как я последний раз это делал; Я не помню. –

0

Просто обратите внимание, что если вы размещаете службы WCF в IIS, вы можете включить поведение aspnet совместимости для вашей службы. В этом случае вы можете установить HttpConext.Current.User для пользователя, которого вы просто аутентифицировали в своем инспекторе сообщений.