Запуск клиентского запроса на сервере - PullRequest
0 голосов
/ 18 января 2010

Я думал, что понял, как работает Open ID, но теперь я в замешательстве ...

К вашему сведению, я не пытаюсь понять, как использовать Open ID в качестве разработчика, а скорее реальные действия, которые он использует для аутентификации через браузер клиента.

Как я понял, пользователь (например) выбирает Google в качестве своего поставщика Open ID. Затем сервер запрашивает предварительно определенный URL-адрес, предоставленный сторонней организацией Open ID. Этот запрос отправляется через браузер клиента, а ответ возвращается на сервер. Если ответ равен «вошел в систему», пользователь не знает о каких-либо действиях в своем браузере, кроме перехода на страницу «Добро пожаловать» на главном сайте. Если ответ равен «никто не выполнил вход», браузер откроет новое окно с экраном входа для третьей стороны.

Так как же страница входа в систему Open ID на самом деле отправляет запрос третьей стороне для получения ответа? Всегда ли запрос должен инициироваться через клиентский скрипт, то есть javascript / ajax, или запросы могут быть отправлены с сервера в браузер без какого-либо javascript вообще?

Ответы [ 2 ]

3 голосов
/ 18 января 2010

Я предлагаю вам прочитать спецификацию .

Короче говоря (это не совсем точно, но большая часть потока есть), проверяющая сторона (иначе RP: сайт, на который пытается войти пользователь) создает URL, который содержит сообщение, которое RP хочет отправить к провайдеру OpenID (OP), который описывает сам RP и какой тип входа он хочет, чтобы пользователь прошел. RP отправляет сообщение 301 Redirect в браузер, поэтому браузер будет перенаправлен на этот URL, созданный RP. Браузер отправит этот URL на OP, поэтому OP получает сообщение. Ответ OP для браузера будет либо HTML-страницей, чтобы пользователь мог войти в OP, либо собственным перенаправлением 301 с тщательно созданным URL-адресом, который отправляет браузер обратно на RP с сообщением RP "да, этот пользователь вошел как x".

RP проверяет, что сообщение от OP является подлинным, либо проверяя подпись OP, включенную в сообщение, используя общий секрет между RP и OP, либо отправляя прямое HTTP-сообщение от RP на OP с запросом " ты отправил это? "

Обратите внимание, что AJAX или любая другая форма сценариев здесь не задействована.

Теперь в некоторых расширенных сценариях можно использовать AJAX , но во всех случаях общий поток информации между RP и OP и браузером одинаков. Вопрос лишь в том, происходят ли некоторые из этих «перенаправлений» в скрытых фреймах через Javascript или нет. И скрытые iframes, конечно, потерпят неудачу, если пользователь не авторизовал OP для автоматического входа пользователя в этот RP в прошлом.

1 голос
/ 21 января 2010

Библиотека openidenabled фактически выдает очень простую html-страницу, состоящую из формы с небольшим количеством javascript, для автоматической отправки формы и перенаправления. Когда javascript не используется, форма распечатывается, и пользователь может нажать кнопку отправки.

...