2015-08-24 2 views
0

Здесь сценарий:Как добавить заголовки на перекрестном домене перенаправлять

Существует веб-страница на домен A. пользователя становится проверкой подлинности в домене А (и сохраняет токен аутентификации в sessionStorage), и делает некоторую деятельность там. Затем пользователю нужно перейти на страницу в домене B. Как только он приземлится на страницу из домена B, эта страница должна каким-то образом сохранить токен аутентификации из домена A. Я контролирую сервер домена B.

Простой подход иметь кнопку на странице в домене А с чем-то вроде

location.href = 'domainB.com/?authtoken=mytoken' 

Здесь возникает проблема я столкнулся:

1) Я не могу (он же сильно не хотят) использовать параметры запроса в URL, даже если соединение https: URL-адреса (в общем) регистрируются, и любая атака легко украдет токен auth, что является нарушением безопасности.

2) Я не хочу устанавливать междоменные куки-те же причины (безопасность).

3) Приложение domainB основано на API, а сервер и клиент не имеют сеанса. Все токены аутентификации сидят в sessionStorage, чтобы предотвратить нарушения безопасности.

В последние пару дней я много искал в googling, но, похоже, я не могу добавить настраиваемый заголовок для загрузки междоменной страницы. «POST» не перезагружает страницу. До сих пор единственным вариантом, который я смог придумать, является отказ от использования сеанса на стороне сервера, то есть:

a) перед тем, как перейти от домена A к B, попросите сервер B создать сеансовый ключ, время использования.

b) перейти к домену B с использованием параметра запроса этого сеансового ключа.

c) один раз сервер домена В получает запрос «GET» с ключом сеанса, извлекает ассоциированный токен аутентификации, отбрасывает сеансовый ключ (т. Е. Эффективно делает его одним таймером) и обслуживает страницу с маркером auth в заголовках.

Проблема с этим подходом:

  1. Это заставляет меня использовать на стороне сервера сессию, то есть значительное ухудшение производительности.

  2. Аутентичный токен сохраняется (однако временно) в сеансе на стороне сервера домена B, что повышает уязвимость системы безопасности всей системы.

  3. По-прежнему открыт для рукопашного нападения.

Любые другие предложения? Как другие решают это? Я не думаю, что все используют такие параметры безопасности, как параметры запроса URL.

ответ

0

ОК, я сам это понял. Решение: возьмите страницу domainA, включите iframe и загрузите iframe со специальной страницей из домена B, затем отправьте сообщение в iframe со страницы на domainA с информацией о токенах/auth, получите это сообщение на этой специальной странице (теперь находящейся в iframe) и сохраняйте это значение в sessionStorage (теперь это принадлежит domainB), а затем postMessage из iframe в родительский, чтобы сообщить, что данные хранятся, а затем перейдите к домену B в родительском - после загрузки основной страницы домена, ему потребуется информация в sessionStorage.

Смежные вопросы