Какие данные допустимо включать в 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