Xpoint
   [напомнить пароль]

Протокол межсайтовой авторизации

Оглавление

Постановка задачи

Пусть имеется некий сайт А (www.somesite.net), на котором могут регистрироваться пользователи с функцией «запомнить меня на этом сайте». Также имеется другой сайт Б (скажем, www.othersite.net), который также должен распознавать эту авторизацию. Проблема в том, что cookie (посредством которой реализуется функция «запомнить меня на этом сайте»), естественно, не может быть прочитана вне домена www.somesite.net.

Вариант решения

Выход тут в прямом (помимо пользовательского браузера) взаимодействии двух сайтов. Авторизация на сайте Б происходит следующим образом:

  1. Сайт Б генерирует уникальную строку KEY.
  2. Сайт Б посылает (напрямую) сайту А сообщение о том, что сейчас на сайт А зайдёт пользователь с таким-то KEY.
  3. Сайт Б создаёт на странице невидимый фрейм (или картинку) с адресом www.somesite.net/...?key=KEY (где ... — заранее известный URI интерфейса авторизации сайта А) и выдаёт эту страницу посетителю.
  4. Браузер посетителя, получив эту страницу, обращается по адресу www.somesite.net/...?key=KEY.
  5. Сайт А, получив обращение по адресу www.somesite.net/...?key=KEY (но только при условии, что он был предупреждён об этом сайтом Б не раньше чем T минут назад), определяет, авторизован ли на нём данный посетитель.
  6. Сайт А посылает (напрямую) сайту Б сообщение о том, что посетитель с данным KEY авторизован с таким-то внутрисайтовским ID-ом (или не авторизован).
  7. Сайт Б принимает эту информацию к сведению и как минимум на протяжении сессии считает данного посетителя авторизованным.

Предложение

Неплохо бы как-то стандартизировать эти действия. Потому что вариантов межсайтовской авторизации множество, все они устроены примерно так же, но нет ни одного открытого стандарта на этот счёт.

Powered by POEM™ Engine Copyright © 2002-2005