Поток доступа к WIF и WCF.Текущий основной метод внутренней службы с отключенным режимом совместимости AspNetCompatibilityMode

#c# #silverlight #wcf #wif #claims-based-identity

#c# #silverlight #wcf #wif #идентификацией на основе утверждений

Вопрос:

У меня есть веб-приложение с приложением silverlight на одной из страниц. Веб-сайт защищен с помощью WIF. Я пытаюсь выполнить вызов WCF из silverlight в службу, размещенную в том же домене приложения, что и мой веб-сайт.

Если у меня включен режим AspNetCompatibilityMode, это работает нормально. Браузер уже прошел аутентификацию, и поэтому, когда выполняется вызов WCF, файлы cookie FedAuth отправляются клиентом silverlight, и WIF правильно устанавливает HttpContext.Current.Пользователя из сеансовых файлов cookie (FedAuth / FedAuth1).

К сожалению, мне нужно отключить AspNetCompatibilityMode. В этом случае я вижу, что вызов silverlight WCF по-прежнему передает файлы cookie FedAuth на сервер, а SessionAuthenticationModule правильно устанавливает поток.CurrentPrincipal. К сожалению, sessionauthenticationmodule, похоже, выполняется в потоке, отличном от фактического метода WCF, который я пытаюсь вызвать, поэтому я потерял идентификатор где-то в конвейере WCF / WIF.

Есть ли способ обойти это? Я попытался создать пользовательскую реализацию SessionAuthenticationModule и переопределить SetPrincipalFromSessionToken (внутри которого я могу получить доступ к своим заявкам и т.д.), Но я не уверен, где я могу сохранить принципал, чтобы у меня был доступ к нему после того, как обработчик канала отправит вызов моей службе в другом потоке.