Предоставление OAuth Javascript API

Я настраиваю веб-сайт в качестве поставщика OAuth 2.0, так же, как Facebook и Twitter. Оба эти сайта позволяют вам "Войти через Facebook/Twitter" с помощью кнопки, которая открывает диалог авторизации. Когда пользователь входит в систему, окно закрывается, и запрашивающая страница теперь имеет токен доступа. Как они делают это таким образом, чтобы не нарушать междоменные политики?

Похоже, что Facebook JS SDK загружается с их сервера, это намеренно, чтобы обойти ограничения x-домена?

Кроме того, в какой момент родительское окно получает токен доступа? Это отправлено ребенком или получено родителем?

Спасибо

1 ответ

Решение

Это делается путем передачи значения из дочерней вдовы в родительское окно. Каждое дочернее окно, которое открывается родительским окном, имеет ссылку на своего родителя, к которому можно получить доступ:

var parent = window.opener.document.document; // by this you have reference to parent DOM
var someParentElement = parent.getElementById("idOfParentDomElement"); // ex: accessing particular element on parent

Таким образом, вы можете передать значение родительскому элементу, обратившись к нему parent:

var childDiv = document.getElemntById("SomeChildDiv").innerHTML;
someParentElement.innerHTML = childDiv // passing html text to parent div

Подробнее об этом здесь

Получение токена доступа является частью потока OAuth. Через oauth токен получен и передан в родительское окно window.opener а потом window.close вызывается родительским окном, чтобы закрыть окно. После этого родитель работает с токеном доступа.

Изменить: После комментариев:

Facebook использует функции postMessage, iframe или flash для обработки междоменных сообщений, которые зависят от браузера. Это включает all.js который является ключевым файлом для обработки сообщений между ними. Вы можете прочитать больше о его механизме здесь

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