Контекст:
В Stack и Bing есть несколько потоков, в которых говорится о WCF и совместном использовании сеансов с ASP.NET . Никто не удовлетворяет мою проблему полностью. Итак, вот так:
У меня есть MVC сайт, на котором также есть несколько служб в RouteTable по пути "/ services". Это все работает действительно хорошо. Я могу вызывать действия контроллера и сервисные методы WCF как.
Я включил WIF и Федеративную аутентификацию с Службой контроля доступа Windows Azure (ACS) . Это тоже хорошо работает. Я могу войти через Facebook, Google и т. Д., И на моем сайте четко установлена сессия. Я могу вызвать действия контроллера MVC и методы WCF. Внутри тела этих IPrincipal для текущего пользователя установлен мой текущий сеанс.
Теперь я хочу быть хорошим мальчиком и использовать пользовательский ClaimsAuthenticationManager и пользовательский ClaimsAuthorizationManager . Теперь возникает странная проблема:
Настройка:
Для этого сценария я вошел в систему. У меня есть сеанс. Я могу подтвердить это внутри тел методов моих методов контроллера MVC и моих методов обслуживания WCF. Это означает, что мы можем исключить из этого пользовательский ClaimsAuthenticationManager, поскольку он не затрагивается, когда у меня уже есть сеанс.
Это пользовательский ClaimsAuthorizationManager, который вызывает мою головную боль.
Когда я звоню на сайт MVC, я аутентифицируюсь с моим сеансом внутри метода ClaimsAuthorizationManager.CheckAccess И также внутри тела моих действий контроллера MVC. Пока все хорошо.
Проблема:
Когда я делаю вызов службам WCF, я НЕ аутентифицируюсь с моим сеансом внутри метода ClaimsAuthorizationManager.CheckAccess, но аутентифицируюсь (внезапно), когда я достигаю своей точки останова внутри метода сервиса WCF.
Это просто не имеет никакого смысла! Кажется, что мой сеанс не раздут внутри менеджера ClaimsAuthorization, но дальше по конвейеру, когда я нажимаю на свой собственный код WCF, сеанс на месте!
Как это может быть?
Приветствия
Magnus