2016-08-15 3 views
0

Я пытаюсь обрабатывать повторную аутентификацию, используя другой веб-сайт авторизации, в то время как в приложении для одиночной страницы (SPA) на моем домашнем веб-сайте. Оба веб-узла являются внутренними для клиентского сайта.Использование CORS для повторной проверки подлинности на другом сайте

Я не могу использовать стандартный метод «перенаправления», так как я потеряю свой СПА-контекст JavaScript.

Я исследовал и установил CORS на веб-сайте Auth, так что теперь он возвращается Access-Control-Allow-Origin: https://www.mywebsite.com. Когда я пытаюсь загрузить страницу Auth в диалоговое окно JQuery UI, она терпит неудачу, поскольку все сценарии пытаются загрузить в контексте веб-сайта Home.

т.е.
с моего сайта https://www.mywebsite.com/static/
я загружаю https://www.auth.com/login.html.

При загрузке в диалог JQuery UI он пытается загрузить это скрипты https://www.mywebsite.com/static/scripts/authscript.js
вместо
https://www.auth.com/scripts/authscript.js

Я также попытался загрузить страницу идентификации в качестве iframe, изменив src тег, но это как раз перезарядил стр.

Есть ли способ изменить исходный каталог в контексте веб-страницы CORS, которую я пытаюсь показать?

+0

Вы использовали относительные пути для своих скриптов? –

+0

На странице Auth - это не мои скрипты. И да, они относительные пути.Я надеюсь, что есть способ изменить «Происхождение», поскольку это эффективно то, что я думал, что сделал, используя CORS. – u02sgb

+0

Вы должны открыть его в новом окне. –

ответ

1

Так что я не мог правильно загрузить страницу в стандартный диалог jQuery Modal, и у меня нет контроля над страницей Auth, к которой я подключался. Чтобы решить эту проблему, я исследовал проблему, которую я имел с iframe, и использовал функцию HTML5 sandbox, чтобы исправить ее.

Страница Auth использовала сценарий «break out», чтобы перезагрузить страницу, если она была загружена в iframe, и, очевидно, это нарушило мой SPA-контекст. HTML5 позволяет вам ограничить содержимое iframe.

<iframe src="" id="my_auth" sandbox="allow-forms allow-scripts allow-same-origin"></iframe>

  • allow-forms Разрешить form и submit
  • allow-scripts смочите JavaScript
  • allow-same-origin пусть считают Origin так же, как сценарий (то есть веб-сайт Auth), это было необходимо для того, чтобы cookie
  • Следует отметить, что я не включаю allow-top-navigation, что и позволило перезагрузить страницу и потеря моего JavaScript контекста

вуаля аутентификации страницы отображается в диалоговом окне JQuery модальное (содержащего iframe) без необходимости выскочит другое окно.

CORS был необходим, чтобы разрешить перенаправление на веб-сайт Auth (что происходит в браузере до того, как задействован JavaScript). Вместо этого вы также можете заблокировать исключение «Access-control-allow-origin».

Надеюсь, это кому-то полезно.