WIF и WCF - доступ к внутреннему методу службы Thread.CurrentPrincipal с отключенным AspNetCompatibilityMode - PullRequest
3 голосов
/ 26 апреля 2011

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

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

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

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

...