JWT: устройство и проверки
Вопрос
Объясни, как устроен JWT и что ты проверишь, тестируя API на JWT.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Три части через точку: 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 ошибок.