К списку
Безопасность и авторизацияSeniorТехническое

Какие данные допустимо включать в JWT для безопасной аутентификации

Краткий ответ

В JWT следует помещать только необходимую для авторизации информацию — идентификатор пользователя, роли и срок действия токена. Хранение конфиденциальных данных недопустимо из-за риска перехвата и декодирования токена.

Развёрнуто

Краткий ответ

JWT-токен содержит данные для подтверждения личности и прав пользователя, включая уникальный идентификатор, роли и время истечения действия. Не рекомендуется помещать в токен чувствительные сведения, поскольку JWT легко декодируется.


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

JWT (JSON Web Token) — это компактный, URL-безопасный токен, содержащий три части: заголовок, полезную нагрузку (payload) и подпись. В payload обычно сохраняют клеймы — утверждения о пользователе и его правах. Обычно это такие данные, как sub (идентификатор субъекта), roles (роли пользователя), exp (время истечения токена).

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

Тип данных Рекомендуется хранить Не рекомендуется хранить
Идентификатор Да
Роли и права Да
Время жизни Да
Пароли, токены Нет Да
Личные данные Нет Да

Пример

{
  "sub": "1234567890",
  "name": "Иван Иванов",
  "roles": ["admin", "user"],
  "iat": 1516239022,
  "exp": 1516242622
}

В этом примере в payload указаны идентификатор пользователя (sub), имя, роли и время выпуска и истечения токена. Вся чувствительная информация отсутствует.

Что важно знать на собеседовании

  • JWT содержит данные, необходимые для аутентификации и авторизации.
  • Информация в JWT не зашифрована, а только подписана, значит она доступна для чтения.
  • Никогда не храните пароли или секреты в JWT.
  • Используйте срок действия (exp) для ограничения времени жизни токена.
  • Для защиты токена применяйте HTTPS и безопасное хранение на клиенте.

Тема: Безопасность и авторизация | Уровень: senior