flask-jwt Как обращаться с токеном?
Я новичок в использовании JWT и flask-jwt, поэтому я запускаю пример, который я нахожу в документации. Я прочитал это, чтобы лучше понять JWT.
Но теперь мне интересно, как мне обращаться с более чем одним токеном? Я имею в виду, что пользователь публикует свои учетные данные в "myserver / auth", а затем возвращает токен клиенту. Когда клиент отправляет новый запрос, он должен отправить токен.
У меня вопрос, как я узнаю, какой "токен" принадлежит какому пользователю и где хранятся "токены"?
1 ответ
JWT состоят из трех частей, разделенных точками (.), Которые:
- заголовок
- полезная нагрузка
- Подпись
Поэтому JWT обычно выглядит следующим образом.
xxxxx.yyyyy.zzzzz
Давайте посмотрим краткое резюме по RFC и это
заголовок
Заголовок обычно состоит из двух частей: типа токена, который является JWT, и алгоритма хеширования, такого как HMAC SHA256 или RSA.
{
"alg": "HS256",
"typ": "JWT"
}
полезная нагрузка
Вторая часть токена - это полезная нагрузка, которая содержит заявки. Заявки - это заявления о сущности (обычно о пользователе) и дополнительные метаданные. Это интересная часть, потому что внутри токена мы можем проверить, кто из вас принадлежит. { "userid": "1234567890", "expiration_date": "2016-05-129" }
Когда мы генерируем новый токен, мы можем указать, какие данные будут содержать полезные данные, поэтому мы можем добавить идентификатор пользователя для идентификации пользователя и expiration_date, чтобы проверить, пришло ли время запросить новый.
Подпись
Чтобы создать часть подписи, вы должны взять закодированный заголовок, кодированную полезную нагрузку, секрет, алгоритм, указанный в заголовке, и подписать его. Подпись используется для проверки того, что отправитель JWT является тем, кем он говорит, и для гарантии того, что сообщение не было изменено в пути.
Серверная сторона
Мы должны хранить наш секретный ключ на стороне сервера, следовательно, мы можем расшифровать допустимую полезную нагрузку и проверить, какому пользователю принадлежит. Таким образом, мы можем избежать хранения токенов, потому что каждый токен хранит достаточно данных для проверки наших пользователей.
Как обновить токен?: со стороны клиента
Процесс создания обновленного токена такой же, поэтому клиентская сторона должна запросить услугу обновления (HTTP-запрос, например, www.myhost.com/renew) и отправить старый токен для генерации нового. Помните, что вы можете проверить, к какому пользователю принадлежит этот токен, поэтому токен обновления должен содержать ту же полезную нагрузку, но с другой датой истечения срока действия.
Единая точка входа
Мы можем использовать JWT с большим количеством стратегий, таких как единый вход, чтобы обеспечить одновременную регистрацию только одного пользователя с одинаковыми учетными данными.