WIF SessionAuthenticationModule CookieHandler не записывает файлы cookie FedAuth
У меня возникают проблемы при получении Windows Identity Framework для записи cookie FedAuth при определенных обстоятельствах. Я занимаюсь разработкой набора веб-сайтов MVC4, которые уже используют WIF и успешно пишут файлы cookie FedAuth для своего собственного домена. Теперь я пытаюсь получить файл cookie для каждого домена в моем наборе.
На моей машине для разработки у меня есть три веб-сайта, размещенных локально на IIS7.5 (app1.mycompany.com, app2.mycompany.com и app3.DIFFDOMAIN.com). Когда я вхожу в app1, я устанавливаю домен cookie на "mycompany.com", что означает, что app1 и app2 являются федеративными, но я не могу найти хороший способ включить app3.
FederatedAuthentication.SessionAuthenticationModule
.CookieHandler.Domain = "mycompany.com".
Вещи, которые я заметил / попробовал до сих пор:
В app1 я могу установить Domain = "app1.mycompany.com" или "mycompany.com", и файл cookie записывается, но если я устанавливаю его на что-либо другое, файл cookie не записывается, поэтому должна быть определенная проверка домена свойство при написании cookie. Это правда??
Я написал API-сервис в app3 для вызова из app1 (например,
https://app3.DIFFDOMAIN.com/fedauth
) который устанавливает Домен = "DIFFDOMAIN.com".- Когда я вызываю API из браузера, файл cookie записывается.
- Когда я вызываю API из app1 с помощью остального клиента, cookie не записывается.
- Когда я перенаправляю перманент из app1 в app3, пишется cookie (но я не хочу перенаправлять).
Итак, я предполагаю, что спрашиваю, почему файл cookie не записывается при использовании остального клиента, а также как я должен интегрировать аутентификацию на всех доменах?
Спасибо,
Джон.
2 ответа
Я не уверен, что получил тебя. В общем, модуль WIF SAM отвечает за обработку файлов cookie FedAuth. Он автоматически делает это, если он правильно настроен в вашей веб-конфигурации. Файл cookie FedAuth содержит выданный токен STS. Модуль FAM перехватывает все запросы и перенаправляет те, которые нуждаются в авторизации, в STS. После аутентификации на STS модуль SAM создает файл cookie или комбинацию с сеансом (зависит от конфигурации) и помещает его в браузер клиента под конкретным доменом. SAM и WAF не несут ответственности за федеративную аутентификацию на всех доменах, но STS несет. STS помещает свой собственный файл cookie в браузер клиентов, поэтому при каждом последующем вызове из другого домена STS теперь будет зависеть от того файла cookie, в который вошел пользователь, и автоматически отправит токен в этот домен с набором утверждений.
Вы должны настроить конфигурацию для всех доменов. Только то, другое дело WIF. Во-вторых, настроить ваш STS, вы можете найти образцы в Интернете.
Чтобы получить подробное описание процесса, ознакомьтесь с этой замечательной статьей: http://msdn.microsoft.com/en-us/magazine/ff872350.aspx
Я надеюсь, что это поможет вам.
Кажется, вам не хватает 2 баллов (попробуйте получить больше информации о них, чтобы получить более четкое представление):
Как работают куки и для чего они используются. Попытка установить cookie для любого другого клиента, кроме того, с которым вы только что общаетесь, или для любого другого домена, кроме вашего, считается небезопасной. Когда ваше федеративное приложение сохраняет данные аутентификации, оно преобразует их в файл cookie FedAuth, который отправляется аутентифицированному клиенту. Клиент отправляет cookie обратно на последующие запросы, и сервер разворачивает его, чтобы "знать" аутентификацию пользователя.
Как работает федеративная аутентификация. Каждое федаратированное приложение (RP) в вашей среде запрашивает у службы STS аутентификацию пользователя. STS отправляет маркер аутентификации в RP, который каким-то образом хранит его, чтобы иметь возможность различать своих пользователей.
Оба эти отношения один в один. Клиент-приложение и приложение-СТС. Нет необходимости делиться информацией об аутентификации одного сеанса клиента с кем-либо еще. Зачем? Клиент аутентифицируется с помощью STS, и STS отправляет эту информацию любому RP, который хочет аутентифицировать этого клиента. Приложения не делятся информацией друг с другом, только с одним STS.