JSON Web Token простыми словами

JWT используются почти в каждом современном входе и API. Это руководство объясняет их устройство, чтение и безопасное использование.

Открыть инструмент: Декодер JWT

Три части

JWT выглядит как xxxxx.yyyyy.zzzzz. Первая часть — заголовок, объект JSON с алгоритмом (alg) и типом (typ). Вторая — полезная нагрузка с полями. Третья — подпись, вычисленная по первым двум частям секретом или закрытым ключом. Каждая часть закодирована в base64url, чтобы безопасно передаваться в URL и заголовках HTTP.

Зарегистрированные поля

  • iss (издатель): кто создал и подписал токен.
  • sub (субъект): пользователь или сервис, к которому относится токен.
  • aud (аудитория): какое приложение должно его принять.
  • exp (истечение): когда токен перестаёт действовать.
  • nbf (не ранее): когда токен начинает действовать.
  • iat (выдан): когда токен создан.
  • jti (ID токена): уникальный ID для защиты от повторного использования.

Токены доступа и ID-токены

В OpenID Connect ID-токен сообщает клиентскому приложению, кто вошёл, и содержит поля профиля, например имя и почту. Токен доступа отправляется в API и показывает, что разрешено вызывающей стороне, часто с полем scope. Токены доступа должны жить недолго, обычно от минут до часа, и обновляться с помощью refresh-токена.

Каких ошибок избегать

  • Декодировать токен без проверки и доверять его полям.
  • Принимать алгоритм, указанный в токене, а не тот, который ожидает сервер.
  • Использовать короткий или угадываемый секрет HMAC. Нужно не меньше 32 случайных байт.
  • Хранить чувствительные данные в полезной нагрузке.
  • Выдавать токены без срока действия или очень долгоживущие токены доступа.