Как работает аутентификация торнадо? - PullRequest
0 голосов
/ 04 июня 2018

Как аутентификация работает в торнадо с методом set_secure_cookie?где эти куки хранятся для нескольких пользователей?Как мы можем аутентифицировать каждый вызов API внутри фреймворка?

1 Ответ

0 голосов
/ 06 июня 2018

Cookies - это просто заголовки HTTP.Ничего особенного.Файлы cookie работают следующим образом:

  1. Браузер отправляет запрос на сервер.Это может быть выполнено любым запросом, например, запросом обычной страницы или отправкой формы входа.Для этого примера давайте просто поговорим о запросе на вход в систему.
  2. Сервер проверит отправленные username и password и убедится, что они верны.Затем сервер установит cookie в этом браузере, чтобы впоследствии он мог идентифицировать пользователя.Чтобы установить cookie, сервер отправит заголовок с именем Set-Cookie вместе с ответом.Это будет выглядеть так - Set-Cookie: sessionId=username.
  3. Когда браузер получит ответ, он также заметит, что в ответе есть заголовок SET-COOKIE.Теперь браузер сохранит это значение где-нибудь на вашем компьютере, это не имеет значения.После этого важно то, что всякий раз, когда браузер отправляет запрос на ваш сервер, он также отправляет этот файл cookie в заголовках запроса, как это - Cookie: sessionId=username.
  4. В следующий раз сервер также заметит заголовок Cookie в запросе.И так, оттуда он получит имя пользователя, вошедшего в систему.

И вот как работают куки.


Теперь, чтобы ответить на ваши вопросы:

Как работает аутентификация в торнадо с помощью метода set_secure_cookie?

Возможно, вы заметили большой недостаток безопасности в приведенном выше примере.Для идентификации пользователя мы установили значение sessionId в виде простого текста.Любой может легко отправить другое имя пользователя в куки, и наш сервер будет относиться к ним как к этому пользователю.Например, если Алиса хочет взломать учетную запись Боба, все, что ей нужно сделать, это отправить файл cookie сеанса, например, так: Cookie: sessionId=bobИ наш сервер будет относиться к Алисе как к Бобу.

Здесь используется метод set_secure_cookie. Он устанавливает подписанный токен вместо простого имени пользователя.Tornado установит подписанные куки-файлы в соответствии с вашим значением cookie_secret.Это безопасно, потому что куки подписаны на основе cookie_secret, который никто не знает, принимает вас.Печенье будет выглядеть так - sessionId=slsafj7987LJflsfslfljk68686sfj.Теперь Алиса не может выдать себя за Боба.

Где эти куки хранятся для нескольких пользователей?

Нигде.Поскольку cookie-файлы подписаны, Tornado будет декодировать значение из подписанных cookie-файлов по мере поступления запроса. Например, если заголовок cookie-файла выглядит так - Cookie: sessionId=alksjfl98798yfaslkdjf.Торнадо декодирует это значение - alksjfl98798yfaslkdjf, чтобы извлечь закодированное имя пользователя.Это происходит на лету.

как мы можем аутентифицировать каждый вызов API внутри фреймворка?

Требуется ли для вызовов API сеанс, такой как аутентификация пользователя, чтобы пользователи могли видеть и редактировать свою учетную запись и т. Д.?Тогда все, что вам нужно, это метод set_secure_cookie.
Если вызовы API независимы друг от друга, то вы должны позволить своим пользователям использовать ваши API с «ключом доступа».Вам нужно будет сохранить эти ключи доступа в базе данных.Ваши пользователи будут отправлять этот ключ доступа при каждом запросе в виде заголовка HTTP или просто параметра запроса:

# as a header
API-Access-Key: <long-random-key>

# OR as a query string
http://yourserver.com?key=<long-random-key>
...