Файл cookie ASP.Net_SessionId для разных поддоменов с использованием IE11
У меня есть два сайта ASP.NET: new.somecompany.com и legacy.somecompany.com.
"Новое" - это приложение для внутренней сети, которое использует проверку подлинности Windows. "Наследие" - это интернет и интранет; он использует проверку подлинности с помощью форм.
На веб-сайте "Новый" мой босс хотел бы иметь возможность щелкнуть ссылку и открыть окно браузера на уже зарегистрированной веб-странице на сайте "Наследие". (Он хочет, чтобы это было сделано без изменений на устаревшем сайте.)
У меня есть решение, которое работает как с Chrome (версия 39.0.2171.95 m), так и с Firefox (версия 33.1.1), но не с Internet Explorer (версия 11.0.9600.17501). На высоком уровне решением является:
- Контроллер на "новом" использует HttpWebRequest для входа в "унаследованный" с использованием сохраненных учетных данных.
- Контроллер получает cookie "ASP.Net_SessionId" из ответа "legacy" и использует его для установки "ASP.Net_SessionId" cookie для домена ".somecompany.com" в браузере.
- Из браузера перейдите на
https://legacy.somecompany.com/somepage.aspx
,
С Chrome и Firefox, https://legacy.somecompany.com/somepage.aspx
отображается соответствующим образом для сохраненных учетных данных, которые использовались для входа в систему. В IE 11 отображается страница входа.
Я использовал инструмент Microsoft Message Analyzer, чтобы увидеть, что передается туда и обратно. В Chrome я вижу файл cookie ASP.Net_SessionId, отправляемый в HTTP-запросе для somepage.aspx. В IE 11 cookie не отправляется, и я получаю перенаправление на страницу входа в качестве ответа.
Что я могу сделать, чтобы заставить это работать в IE 11?
2 ответа
Этот блог дал мне ответ. В частности, этот абзац:
Проблема № 3 возникает в Windows Vista и выше, когда вы настроили один поддомен для работы вне защищенного режима (например, поместите его в доверенную зону) и другой связанный поддомен для запуска в защищенном режиме (например, оставили его в зоне Интернета), Это не очень распространено, но может произойти, если вы, например, поместите login.live.com в Доверенную зону, но не добавите mail.live.com в Доверенную зону. Основная причина этой неясной проблемы заключается в том, что защищенный режим и незащищенный режим не совместно используют файлы cookie, и, следовательно, файлы cookie, установленные сайтом за пределами защищенного режима, не будут видны сайту, работающему в защищенном режиме, и наоборот.
В моем случае "new.somecompany.com" находился в зоне локальной интрасети в настройках IE, а "legacy.somecompany.com" - нет. После добавления "legacy.somecompany.com" в зону интрасети мой код работал в IE 11.
У меня была похожая ситуация. Совсем недавно я разработал веб-приложение, которое я хотел кодировать один раз и развернуть (в iFrame) на сайте Windows Authenticate and Anonymous.
Пользователь должен войти в систему с помощью Active Director или войти на внешний сайт.
Вот как я справился с этим. В обоих случаях сайт iFrame работает на том же домене (как вы показываете) site1.company.com или site2.company.com
Вот как я справился с этим.
Сайт A: Пользователь входит в систему, шифрует имя пользователя и сохраняет его в файле cookie. (Я использовал шифрование AES с закрытым ключом).
Сайт B: прочитайте cookie, расшифруйте идентификатор пользователя и войдите на сайт.
Кроме того, в файле cookie есть зашифрованное значение (дата и время), и оно проверяется по истечении 3 секунд.