Сохранение аутентификации на нескольких серверах - PullRequest
2 голосов
/ 22 июня 2010

Я пишу приложение в Google Appengine Python. Из-за ограниченной поддержки среды appengine мне необходимо реализовать некоторые функции на внешних выделенных серверах. Доступен ли механизм аутентификации, который сохранит информацию для входа на внешние серверы и appengine.

1 Ответ

2 голосов
/ 22 июня 2010

Система, которую вы хотите, вероятно, должна работать примерно так:

  1. Когда пользователь посещает «другой» сервер без установленного сеансового cookie, сервер перенаправляет пользователя на специальный URL-адрес в приложении App Engine - давайте использовать / аутентифицировать - с помощью параметра строки запроса «next», который предоставляет URL-адрес следующего этапа (описано в # 3).
  2. Когда App Engine получает запрос / аутентификацию, он проверяет, выполнил ли пользователь там вход. Если это не так, он предлагает им войти в систему. Затем он создает токен для сеанса пользователя и подписывает его с помощью HMAC, используя секрет, общий для обоих серверов, и перенаправляет пользователя на URL-адрес, указанный на шаге 1. , с HMAC, включенным в строку запроса.
  3. Когда «другой» сервер получает запрос на свой специальный URL-адрес (указанный на шаге 1), он проверяет соответствие HMAC, используя общий секрет, и, если это так, использует собственную поддержку сеанса для установки файла cookie. в браузере пользователя под его доменом, чтобы отслеживать пользователя с тех пор.
  4. Если «другому» серверу нужно получить больше информации о пользователе, он может использовать API, которым он делится с сервером App Engine, для запроса внеполосной информации о пользователе, используя выданный ему токен. и общий секрет.

Это очень похоже на процедуру, используемую OAuth, но совершенно неинтерактивно для пользователя. Это также процедура, которую системы единого входа, такие как учетные записи Google, используют для «передачи» сеансов другим доверенным сторонам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...