Менеджер авторизации службы WCF, устанавливающий Thread.CurrentPrincipal - PullRequest
3 голосов
/ 19 октября 2011

У меня есть пользовательский ServiceAuthorizationManager, где я переопределяю CheckAccess и проверяю собственный токен авторизации, который является частью URL. После проверки я устанавливаю Thread.CurrentPrincipal с помощью GenericPrincipal. Но когда запрос наконец достигает моего метода сервиса, Thread.CurrentPrincipal пропадает, это не то, что я установил в менеджере аутентификации. Что не так?

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Я справился с этим, установив PrincipalPermissionMode = "None" в поведении службы, где я регистрирую диспетчер авторизации службы.Предполагается, что это говорит среде выполнения wcf о том, чтобы не помещать никаких участников в текущий поток.Если вы установите его в «custom», он перезаписывает любой принципал, который вы установили с помощью GenericPrincipal.

1 голос
/ 20 октября 2011

Если вы не хотите использовать встроенные механизмы для авторизации, WCF требует, чтобы текущий принципал был идентифицирован с помощью IAuthorizationPolicy для правильной интеграции в конвейер WCF. Вам нужно будет указать и PrincipalPermissionMode для 'Custom'.

Подробное введение см. В этой статье: Авторизация в службах на основе WCF

...