Файл 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). На высоком уровне решением является:

  1. Контроллер на "новом" использует HttpWebRequest для входа в "унаследованный" с использованием сохраненных учетных данных.
  2. Контроллер получает cookie "ASP.Net_SessionId" из ответа "legacy" и использует его для установки "ASP.Net_SessionId" cookie для домена ".somecompany.com" в браузере.
  3. Из браузера перейдите на 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

Вот как я справился с этим.

  1. Сайт A: Пользователь входит в систему, шифрует имя пользователя и сохраняет его в файле cookie. (Я использовал шифрование AES с закрытым ключом).

  2. Сайт B: прочитайте cookie, расшифруйте идентификатор пользователя и войдите на сайт.

Кроме того, в файле cookie есть зашифрованное значение (дата и время), и оно проверяется по истечении 3 секунд.

Другие вопросы по тегам