2010-09-20 6 views
3

В конструкторе моего WCF служба класса я задающий ток принципала в том, что основной сумме, переданной в заголовке сообщения:WCF Service - Пользовательский Principal

Thread.CurrentPrincipal = OperationContext.Current.IncomingMessageHeaders.GetHeader<BBPrincipal>("bbPrincipal", "ns"); 

Это, кажется, работает хорошо, однако когда я пришел к ссылке принципала в методе, Thread.CurrentPrincipal вернулась к WindowsPrincipal.

Предположительно, этот способ срабатывает по другой теме. Как я могу убедиться, что метод использует главный набор в конструкторе службы?

+1

Вы должны объяснить, что это цель, которую вы пытаетесь достичь. Вы хотите запустить свою службу под другой учетной записью/олицетворять? Конечно, поток для обработки входящего запроса будет отличаться от потока, созданного службой. – Aliostad

+0

Где вы выполняете этот код: «установка текущего принципала в качестве принципала, переданного в заголовке сообщения» - мне очень интересно, потому что у меня есть аналогичная проблема. –

ответ

7

Я только что нашел ответ на свой первоначальный вопрос. Для того, чтобы остановить WCF перекрывая принципал с пустыми один, установите следующее в конфигурации поведения:

<serviceAuthorization principalPermissionMode="None" /> 

Простой, как и нет необходимости из радикальных изменений в существующем коде.

См: http://connect.microsoft.com/VisualStudio/feedback/details/369445/wcf-service-configured-for-transport-security-shouldnt-change-thread-currentprincipal

+0

Я сделал то же самое спасибо! Я попытался настроить принципала, проверяя учетные данные пользователя (в UserNamePasswordValidator) и могу получить его в моих службах. В любом случае мне было интересно, если вы испытали какую-то мистическую проблему, так как все (и документация ms) говорят: «Задайте своего принципала в пользовательской политике авторизации». Tnx снова заблаговременно. –

+0

Точно, что я искал, спасибо! –

4

WCF всегда устанавливает основную директиву в AuthorizationPolicy, поэтому он, возможно, перезаписывает ваши изменения. Вы должны реализовать custom authorization policy и установить там главный.

+0

+1 для mainPermissionMode = «Пользовательский». Другим полезным примером этого является пример кода DotNetOpenAuth для [OAuthResourceServer] (https://github.com/DotNetOpenAuth/DotNetOpenAuth/tree/master/samples/OAuthResourceServer/Code) –

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

  • Нет связанных вопросов^_^