Мне нужно настроить главный сайт, который будет внедрять сайт 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 будут считаться одинаковыми (может просто показать, что логин завершился неудачно, если они отсутствуют).
Список идей до сих пор:
Я могу записать учетные данные для входа в файл cookie основного сайта и использовать его для заполнения полей iframe. Может быть, хранить зашифрованную версию и расшифровывать, когда это необходимо? Но все же хранение пароля в файлах cookie (даже зашифрованных) кажется абсурдным.
То же, что и выше, но сохраните его в переменной сеанса основного сайта.
Идея кросс-доменных файлов cookie кажется бесполезной здесь, потому что каждый сайт должен установить свои собственные куки сеанса, один веб-сайт не может установить его для другого...
Я никогда раньше ни с кем не сталкивался с кросс-доменом. Поэтому, прежде чем я пойду и начну кодировать такие вещи, как безумный человек, который может работать или не работать, я обращаюсь к вам за помощью и советом! Как бы вы это сделали? Это вообще возможно?
Дополнительный вопрос:
Куки, установленные сайтом 1 и 2 изнутри iframe, ведут себя одинаково? Являются ли они постоянными, и если я открою один и тот же сайт NOT в iframe позже, будут ли они приняты?
Если хранить учетные данные (файлы cookie/сеанс) - это единственный способ: как я буду заполнять поля входа в iframe и отправить форму? Javascipt? Какой-то аккуратный трюк GET/POST/redirection?
Заранее спасибо!
Хорошо, это оказалось довольно просто. И привязать его к downvoters... лицо - я выложу свое решение здесь, кто знает, может быть, кто-то найдет его полезным.
Действия jQuery при нажатии ссылки на сайт 1 или 2:
target="iframe"
Vuala, работающий междоменный iframe авто-логин...
Конечно, там больше происходит, как скрытие, невидимые divs на нажатия кнопок, тайм-ауты сеанса, срок действия токена возобновляются при любом действии пользователя и так далее, но главное, что он работает! Да, пароль отправляется в 3 раза, но ни один из этих сайтов не имеет HTTPS. Пароль также не сохраняется в обычном режиме.
Обновить:
Говорил слишком рано. Есть проблемы с IE и Safari, когда содержимое iframe возвращает заголовки Access-Control-Allow-Origin. Их более сильные политики безопасности относятся к содержимому iframe с осторожностью и не позволяют сохранять файлы cookie сеанса. Он может быть исправлен путем сброса настроек конфиденциальности с помощью надписи в IE, позволяя сторонним кукисам в Safari или просто обнаруживать браузер и, если он один из вышеперечисленных, открыть его в новой вкладке/окне.
В противном случае работает отлично: Chrome, Firefox, Opera и Maxthon