2010-11-03 3 views
2

У меня есть следующие ситуации (план):WCF AuthorizationPolicy: Олицетворение Проблема

Авторизация Webservice
Эта услуга вызывается и проверяет (путем выполнения данной бизнес-логики), может ли пользователь является действительным или нет.

Пользовательские Бизнес Webservice
Это некоторый вебсервис создан для бизнес-приложений, которые внутренне называет «Authorization WebService» для того, чтобы проверить счет, который назвал бизнес WebService.

Я понял эту логику, используя авторизацию службы WCF в своем «Custom Business Webservice». В основном я настроил

<serviceAuthorization principalPermissionMode="Custom"> 
    <authorizationPolicies> 
     <add policyType="MyCompany.Authorization.WCF.AuthorizationPolicy, MyCompany.AuthorizationDll"/> 
    </authorizationPolicies> 
</serviceAuthorization> 

AuthorizationPolicy внутренне вызывает "Authorization WebService".

Проблема
Проблема заключается в том, что мне нужно Олицетворять вызывающему моего «Custom Business Webservice». Идентификатор клиента является правильным, однако WindowsIdentity - это пользователь пула приложений.
Примечание. Произведение олицетворения в рамках самой услуги, если я использую [OperationBehavior(Impersonation = ImpersonationOption.Required)], но не в рамках метода AuthorizationPolicy Evaluate(...).

(я использую транспортный уровень безопасности, используя учетные данные окна, очевидно)

Каждый имеет какие-либо намеки на то, как я могу выдать себя за вызывающего абонента перед входом в метод IAuthorizationPolicy.Evaluate(...) ??

ответ

3

Это всегда снова немного странно, отвечая на мои собственные вопросы, но ради того, чтобы поделиться тем, что я получил с другими, я собираюсь опубликовать здесь «решение».

Постараюсь покороче:

  1. чужого имени в IAuthorizationPolicy.Evaluate (...) не представляется возможным. (S4U2Self может работать, не проверял, что, поскольку у меня не было такой вариант)

Как я уже упоминал, выдав себя вызывающему в рамках операции WebService работал путем размещения [OperationBehavior(Impersonation = ImpersonationOption.Required)]. Поэтому вызов моего пользовательского веб-сервиса для извлечения принципала в качестве первого оператора в моей службе всегда будет работать. Однако мне не понравился этот подход.
В качестве альтернативы я попытался найти самую последнюю возможную точку в цепочке вызовов службы WCF-сервиса, в которой наконец-то работали олицетворения. Здесь я нашел OperationInvoker.

Следующая диаграмма иллюстрирует последовательность dispatchings, которые сделаны до того, как вызов поступает в реальной работе (взято из here):
alt text

Параметр Осмотр был слишком рано, олицетворения еще не работает, но он, к счастью, работал в Operation Invoker.Таким образом, написав специальный invoker операции и все содержимое в атрибут поведения пользовательской операции, я смог изящно решить проблему.

Дополнительная информация о соответствии blog post I wrote.

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