Являются ли запросы к службе WCF, размещенной WAS, аутентифицированной конвейером обработки IIS или...?

Следующие вопросы предполагают, что мы размещаем в WAS службу WCF бок о бок с Asp.Net:

"При размещении WCF бок о бок с Asp.Net - хостинг WCF инфраструктура перехватывает запросы WCF, когда Событие PostAuthenticateRequest повышается и не возвращает обработку к конвейеру HTTP ASP.NET. Модули, которые кодируются для перехвата запросы на более поздних этапах трубопровода не перехватывают WCF запросы".

"С бок о бок конфигурация, хостинг-инфраструктура WCF перехватывает сообщения WCF и маршрутизирует их из конвейера HTTP"

a) Предполагая, что WAS получает запрос на службу WCF, будет активирован механизм аутентификации WCF (Windows, MembershipProvider или пользовательская аутентификация), когда будет вызвано событие PostAuthenticateRequest или будет ли WCF аутентифицировать запрос только после того, как он перенаправит запрос HTTP-конвейера? Другими словами, механизм аутентификации WCF работает за пределами конвейера обработки IIS?

b) Если механизм проверки подлинности WCF работает вне конвейера обработки IIS, то я предполагаю, что FormsAuthenticationModule не связан с аутентификацией клиента WCF (при условии, что служба использует проверку подлинности форм)?

c) Кроме того, если механизм проверки подлинности WCF работает вне конвейера обработки IIS, то я предполагаю, что IIS/WAS необходимо настроить для анонимной аутентификации, даже если служба является аутентификацией клиентов, использующих проверку подлинности Windows?

d) Были ли ответы на мой вышеупомянутый вопрос различными, если бы служба WCF была размещена IIS7 (помимо того факта, что служба должна использовать только конечные точки, которые обмениваются данными по протоколу HTTP)?

Спасибо

Ответ 1

Я бы рекомендовал внедрить проект технического спайка.

В основе вы всегда можете реализовать атрибут codeaccess, чтобы защитить свои операции.

Вы можете начать с применения PrincipalPermission (встроенного), где вы устанавливаете IPrincipal в Thread.CurrentPrincipal(конструктор вашей службы wcf) при размещении в IIS вы можете установить HttpContext.Current.User, однако HttpContext будет иметь значение null в вашем случае. Чтобы использовать PrincipalPermission, вам нужно будет иметь собственную возможность создавать/внедрять IPrincipal.

Ответ 2

Я могу отвечать только на часть D и часть B, но этого может быть достаточно, чтобы решить проблему, которую вы пытаетесь решить: если вы размещаете службу WCF внутри приложения ASP.Net, то поддерживается аутентификация форм, ЕСЛИ вы включаете Совместимость ASP.Net в службе WCF. Мы широко используем этот метод с помощью наших апплетов Silverlight.

Это двухэтапный процесс:

1) Укрась свой класс реализации службы WCF атрибутом AspNetCompatibilityRequirements (код vb.net ниже):

<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _

2) Добавьте следующую запись в раздел <system.servicemodel> в web.config:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />