WEB

Токен JSON Web Token (JWT)

JSON Web Token (JWT) — это открытый стандарт для создания токенов доступа, основанный на формате JSON.

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

Токен JWT состоит из трех частей:

  1. заголовок (header)
  2. полезная нагрузка (payload)
  3. подпись или данные шифрования

Первые два элемента — это JSON объекты определенной структуры. Третий элемент вычисляется на основании первых и зависит от выбранного алгоритма (в случае использования не подписанного JWT может быть опущен).

Токены могут быть перекодированы в компактное представление (JWS/JWE Compact Serialization): к заголовку и полезной нагрузке применяется алгоритм кодирования Base64-URL, после чего добавляется подпись и все три элемента разделяются точками («.»).
К примеру, для заголовка и полезной нагрузки, которые выглядят таким образом:

JSON Web Token (JWT)
Заголовок


В заголовке указывается необходимая информация для описания самого токена.

Обязательный ключ здесь только один:
alg: алгоритм, используемый для подписи/шифрования (в случае не подписанного JWT используется значение «none»).

Необязательные ключи:
typ: тип токена (type). Используется в случае, когда токены смешиваются с другими объектами, имеющими JOSE заголовки. Должно иметь значение «JWT».
cty: тип содержимого (content type). Если в токене помимо зарегистрированных служебных ключей есть пользовательские, то данный ключ не должен присутствовать. В противном случае должно иметь значение «JWT»


Полезная нагрузка


В данной секции указывается пользовательская информация (например, имя пользователя и уровень его доступа), а также могут быть использованы некоторые служебные ключи.

Все они являются необязательными:
iss: чувствительная к регистру строка или URI, которая является уникальным идентификатором стороны, генерирующим токен (issuer).
sub: чувствительная к регистру строка или URI, которая является уникальным идентификатором стороны, о которой содержится информация в данном токене (subject). Значения с этим ключом должны быть уникальны в контексте стороны, генерирующей JWT.
aud: массив чувствительных к регистру строк или URI, являющийся списком получателей данного токена. Когда принимающая сторона получает JWT с данным ключом, она должна проверить наличие себя в получателях — иначе проигнорировать токен (audience).
exp: время в формате Unix Time, определяющее момент, когда токен станет не валидным (expiration).
nbf: в противоположность ключу exp, это время в формате Unix Time, определяющее момент, когда токен станет валидным (not before).
jti: строка, определяющая уникальный идентификатор данного токена (JWT ID).

Использование в клиент-серверных приложениях

 

Access и Refresh токены


Access-токен — это токен, который предоставляет доступ его владельцу к защищенным ресурсам сервера. Обычно он имеет короткий срок жизни и может нести в себе дополнительную информацию, такую как IP-адрес стороны, запрашивающей данный токен.
Refresh-токен — это токен, позволяющий клиентам запрашивать новые access-токены по истечении их времени жизни. Данные токены обычно выдаются на длительный срок.

 

Схема работы


Как правило, при использовании JSON токенов в клиент-серверных приложениях реализована следующая схема:


1. Клиент проходит аутентификацию в приложении (к примеру, с использованием логина и пароля).
2. В случае успешной аутентификации, сервер отправляет клиенту access- и refresh-токены.
3. При дальнейшем обращении к серверу, клиент использует access-токен. Сервер проверяет токен на валидность и предоставляет клиенту доступ к ресурсам.
4. В случае, если access-токен становится не валидным, клиент отправляет refresh-токен, в ответ на который сервер предоставляет два обновленных токена.
5. В случае, если refresh-токен становится не валидным, клиент опять должен пройти процесс аутентификации.

JSON Web Token (JWT) — это открытый стандарт для создания токенов доступа, основанный на формате JSON.


Преимущества JSON Web Token (JWT) над куки:


• При использовании куки сервер должен хранить информацию о выданных сессиях, в то время как использование JWT не требует хранения дополнительных данных о выданных токенах: все, что должен сделать сервер — это проверить подпись.


• Сервер может не заниматься созданием токенов, а предоставить это внешним сервисам.


• В JSON токенах можно хранить дополнительную полезную информацию о пользователях. Как следствие — более высокая производительность. В случае c куки иногда необходимо осуществлять запросы для получения дополнительной информации. При использовании JWT эта информация может быть передана в самом токене.


• JWT делает возможным предоставление одновременного доступа к различным доменам и сервисам.

Tags: , , , , , , , , , , , , ,

© 2021 QAstart.by