Ответ вслух Senior Авторизация и безопасность API обновлено

JWT: устройство и проверки

Вопрос

Объясни, как устроен JWT и что ты проверишь, тестируя API на JWT.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

JWT это строка из трёх частей через точку: заголовок с алгоритмом, полезная нагрузка с claims и подпись. Первые две части просто закодированы в Base64URL, их читает любой на jwt.io, поэтому первая проверка: в payload нет паролей, телефонов и прочего лишнего.

Что должно прозвучать в ответе

  • Три части через точку: header, payload, signature, кодирование Base64URL

  • Payload читается без ключа, секретов там быть не должно

  • Подпись защищает от подделки, сервер проверяет её и разрешённый алгоритм

  • Claims: exp, iat, sub, aud, iss; сервер сам проверяет срок и аудиторию

  • Проверки: alg none, изменённый payload, чужой ключ, просроченный токен, отзыв при выходе

Что могут спросить следом

  • Как отозвать JWT до истечения?
  • Где хранить токен в браузере?
  • Чем HS256 отличается от RS256?

Разбор

JWT это строка из трёх частей через точку: заголовок с алгоритмом, полезная нагрузка с claims и подпись. Первые две части просто закодированы в Base64URL, их читает любой на jwt.io, поэтому первая проверка: в payload нет паролей, телефонов и прочего лишнего. Подпись делается секретом сервера в HS256 или приватным ключом в RS256, во втором случае другие сервисы проверяют токен публичным ключом. Что я тестирую: подменяю role в payload без перевыпуска подписи, ставлю alg none и убираю подпись, подписываю своим ключом, шлю токен с exp в прошлом и токен для другого aud: всё должно давать 401. Важный нюанс: JWT по природе не отзывается, сервер его не хранит. Поэтому access делают коротким, минуты, а при выходе отзывают refresh, и я проверяю, что после выхода новый access получить нельзя. Если продукт требует мгновенного отзыва, нужен чёрный список или проверка версии сессии, и это тоже стоит протестировать.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме