Как начать действительный сеанс пользователя внутри iframe

0

Мне нужно настроить главный сайт, который будет внедрять сайт 1 и сайт 2 в iframe, войти и запустить пользовательские сессии внутри них.

Сайт 1 (RoR) и Site 2 (неизвестный фреймворк) получил свою собственную аутентификацию (имя пользователя, пароль, куки, обычная инфраструктура безопасности).

Сервер Master Site (PHP) имеет прямой доступ к базе данных Site 1, и я знаю алгоритм хэширования пароля, поэтому я могу проверить пароль для входа в основной сайт на сайт 1. Сайт 2 может при необходимости изменить их пароли, но не получить доступ к db ни рамки.

К сожалению, я не могу ничего изменить ни на сайте 1, ни на сайте 2. Я могу только строить вокруг него, хотя присутствует полный доступ на чтение к сайту 1.

Я набросал краткую диаграмму, чтобы лучше показать, что я имею в виду:

занятый кот http://gettaxi.me/public_img/help.png

Мне нужно запустить сеанс пользователя внутри iframe. Учетные данные для входа на сайт 1 идентичны мастер-сайту, поскольку они поступают из одного и того же БД, учетные данные для Сайта 2 будут считаться одинаковыми (может просто показать, что логин завершился неудачно, если они отсутствуют).

Список идей до сих пор:

  1. Я могу записать учетные данные для входа в файл cookie основного сайта и использовать его для заполнения полей iframe. Может быть, хранить зашифрованную версию и расшифровывать, когда это необходимо? Но все же хранение пароля в файлах cookie (даже зашифрованных) кажется абсурдным.

  2. То же, что и выше, но сохраните его в переменной сеанса основного сайта.

  3. Идея кросс-доменных файлов cookie кажется бесполезной здесь, потому что каждый сайт должен установить свои собственные куки сеанса, один веб-сайт не может установить его для другого...

Я никогда раньше ни с кем не сталкивался с кросс-доменом. Поэтому, прежде чем я пойду и начну кодировать такие вещи, как безумный человек, который может работать или не работать, я обращаюсь к вам за помощью и советом! Как бы вы это сделали? Это вообще возможно?

Дополнительный вопрос:

  1. Куки, установленные сайтом 1 и 2 изнутри iframe, ведут себя одинаково? Являются ли они постоянными, и если я открою один и тот же сайт NOT в iframe позже, будут ли они приняты?

  2. Если хранить учетные данные (файлы cookie/сеанс) - это единственный способ: как я буду заполнять поля входа в iframe и отправить форму? Javascipt? Какой-то аккуратный трюк GET/POST/redirection?

Заранее спасибо!

  • 0
    Хотели бы вы, по крайней мере, объяснить это?
  • 1
    Большинство людей задают вопросы типа «как бы вы» на SO ... если они не заданы кем-то с высоким репутацией, то с ними все в порядке. Так же, как наказывать людей и делать комментарии не по теме. С коллективным интеллектом в области кодирования этого сообщества и частотой, с которой эти вопросы видны, и, опять-таки, на них наплевать, может быть, кто-то из влиятельных людей поймет, что раздел обзора кода SO не привлекает людей. Вероятно, просто вещь понимания, но если они изменят это, верующие не смогут троллить мост и шлепать по рукам людей. Мы все знаем, что это не может произойти :)
Показать ещё 1 комментарий
Теги:
iframe
cross-domain

1 ответ

1
Лучший ответ

Хорошо, это оказалось довольно просто. И привязать его к downvoters... лицо - я выложу свое решение здесь, кто знает, может быть, кто-то найдет его полезным.

  1. Пользователь регистрируется на главной странице
  2. Проверка учетных данных
  3. Создание случайного клиентского токена
  4. Шифруйте пароль с этим токеном и храните криптографию в переменной сеанса
  5. Установите cookie и сохраните этот токен в браузере пользователей.

Действия jQuery при нажатии ссылки на сайт 1 или 2:

  1. Отправьте запрос ajax на сервер с этим токеном
  2. Проверка сеанса пользователя и дешифрование сохраненного пароля при успешном завершении
  3. Отправьте пароль обратно клиенту и заполните поля имени пользователя и пароля скрытой формы, которая имитирует форму входа в iframed
  4. Отправьте эту форму с target="iframe"
  5. Очистить заполненные поля формы

Vuala, работающий междоменный iframe авто-логин...

Конечно, там больше происходит, как скрытие, невидимые divs на нажатия кнопок, тайм-ауты сеанса, срок действия токена возобновляются при любом действии пользователя и так далее, но главное, что он работает! Да, пароль отправляется в 3 раза, но ни один из этих сайтов не имеет HTTPS. Пароль также не сохраняется в обычном режиме.

Обновить:

Говорил слишком рано. Есть проблемы с IE и Safari, когда содержимое iframe возвращает заголовки Access-Control-Allow-Origin. Их более сильные политики безопасности относятся к содержимому iframe с осторожностью и не позволяют сохранять файлы cookie сеанса. Он может быть исправлен путем сброса настроек конфиденциальности с помощью надписи в IE, позволяя сторонним кукисам в Safari или просто обнаруживать браузер и, если он один из вышеперечисленных, открыть его в новой вкладке/окне.

В противном случае работает отлично: Chrome, Firefox, Opera и Maxthon

Ещё вопросы

Сообщество Overcoder
Наверх
Меню