Добавить в корзинуПозвонить
Найти в Дзене
Фронтендер

Ты неправильно используешь JWT

JWT (JSON web token) - определяет компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON Для работы с jwt Правильно сформированный JWT состоит из трех объединенных строк в кодировке Base64url, разделенных точками (.) Может быть: JOSE (JSON Object Signing and Encryption) Cодержит метаданные о типе токена и криптографических алгоритмах, используемых для защиты его содержимого.
Cостоит из набора параметров заголовка, которые обычно состоят из пары имя/значение: используемый алгоритм хеширования (например, HMAC SHA256 или RSA) и тип JWT. Cодержит проверяемые заявления о безопасности, такие как личность пользователя и предоставленные ему разрешения. Registered claims Public claims Public claims в JWT – это утверждения, которые могут быть определены по желанию разработчика, но для обеспечения уникальности и избежания конфликтов с другими утверждениями рекомендуется следовать некоторым правилам. Private claims Private claims - это произвольные данн
Оглавление

JWT (JSON web token) - определяет компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON

Для работы с jwt

https://ordina-jworks.github.io/microservices/2016/05/01/Using-JWT-Tokens-for-State-Transfer.html
https://ordina-jworks.github.io/microservices/2016/05/01/Using-JWT-Tokens-for-State-Transfer.html

Где использовать

  • Аутентификация - заключается в том, чтобы убедиться, что пользователь — тот, за кого себя выдает. Вы подтверждаете свою личность чем-то, что у вас есть, например, именем пользователя и паролем.
  • Авторизация.
    После успешного входа пользователя в систему приложение может запросить доступ к маршрутам, службам или ресурсам (например, API) от имени этого пользователя. Для этого в каждом запросе необходимо передать токен доступа , который может быть в форме JWT. Единый вход (SSO) широко использует JWT из-за небольших накладных расходов формата и его возможности легко использовать в разных доменах.
  • Обмен информацией.
    JWT — это хороший способ безопасной передачи информации между сторонами, поскольку они могут быть подписаны, что означает, что вы можете быть уверены, что отправители — те, за кого себя выдают. Кроме того, структура JWT позволяет вам убедиться, что содержимое не было подделано.
https://sendpulse.com/ru/support/glossary/authentication
https://sendpulse.com/ru/support/glossary/authentication

Пример использования

Создание jwt

-3

Расшифровка jwt

-4

Структура

Правильно сформированный JWT состоит из трех объединенных строк в кодировке Base64url, разделенных точками (.)

https://jwt.io/introduction
https://jwt.io/introduction

header payload signature JWT менять местами нельзя

Может быть:

  • Невалидный токен
  • Ошибка при декодировании
  • Проблемы с проверкой подписи

JOSE Header

JOSE (JSON Object Signing and Encryption)

Cодержит метаданные о типе токена и криптографических алгоритмах, используемых для защиты его содержимого.

Cостоит из набора параметров заголовка, которые обычно состоят из пары имя/значение: используемый алгоритм хеширования (например, HMAC SHA256 или RSA) и тип JWT.

-6

JWS payload

Cодержит проверяемые заявления о безопасности, такие как личность пользователя и предоставленные ему разрешения.

-7

Registered claims

  • iss (Issuer): Эмитент JWT. Определяет, кто выдал токен.
  • sub (Subject): Субъект JWT. Обычно представляет пользователя или другой субъект.
  • aud (Audience): Получатель, для которого предназначен JWT. Определяет, кто может использовать этот токен.
  • exp (Expiration Time): Время, по истечении которого JWT становится недействительным. Указывается в формате Unix времени.
  • nbf (Not Before): Время, до которого JWT не должно быть принято к обработке. Указывается в формате Unix времени.
  • iat (Issued At): Время выдачи JWT. Указывается в формате Unix времени.
  • jti (JWT ID): Уникальный идентификатор JWT. Может использоваться для предотвращения повторного воспроизведения токенов.
-8

Public claims

Public claims в JWT – это утверждения, которые могут быть определены по желанию разработчика, но для обеспечения уникальности и избежания конфликтов с другими утверждениями рекомендуется следовать некоторым правилам.

  • Использовать URI: Создавайте утверждения, используя URI, которые содержат уникальное пространство имен. Это помогает избежать коллизий.
  • Регистрируйтесь в реестре IANA: Для утверждений, которые могут быть общими или широко используемыми, можно зарегистрироваться в Реестре веб-токенов IANA JSON
-9

Private claims

Private claims - это произвольные данные, которые можно включать в JWT.

-10

JWS signature

Используется для проверки того, что токен заслуживает доверия и не был подделан.

Для создания подписи берутся закодированные в Base64 заголовок и полезная нагрузка, а также секрет, которые подписываются с помощью алгоритма, указанного в заголовке.

-11

Как работает JWT

1. Аутентификация: После успешного входа пользователя в систему, сервер возвращает JWT.

2. Хранение: Не рекомендуется хранить конфиденциальные данные в токенах. Избегайте хранения токенов в небезопасных местах (например, localStorage).

3. Использование: Для доступа к защищенным ресурсам пользователь отправляет JWT в заголовке Authorization с схемой Bearer

-12

4. Размер токена: Серверы могут не принимать заголовки размером более 8 КБ.