Установка идентификатора / принципала из MessageInspector в WCF - PullRequest
4 голосов
/ 30 марта 2010

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

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

Ответы [ 3 ]

1 голос
/ 30 марта 2010

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

0 голосов
/ 06 августа 2010

У Рори есть пост, в котором описано решение этой проблемы. http://www.neovolve.com/2008/04/07/wcf-security-getting-the-password-of-the-user/

0 голосов
/ 30 марта 2010

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

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