Код Senior Криптография на практике и JWT обновлено
Разбор и проверка JWT без библиотек
Условие
Напишите verify_jwt(token, secret, now), которая проверяет JWT, подписанный HS256, и возвращает payload (словарь) или None.
- Токен из трёх частей через точку, каждая в base64url без выравнивания
=. - Заголовок JSON;
algдолжен быть строго"HS256". Любой другой алгоритм, включаяnoneиhs256, отклоняется. - Подпись: HMAC-SHA256 от строки
заголовок.payload(как в токене) с ключомsecretв UTF-8. Сравнение за постоянное время. - Payload JSON-объект. Если есть
expиnow >= exp, отклонить. Если естьnbfиnow < nbf, отклонить. - Любая ошибка разбора даёт
None.
Примеры
verify_jwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsImV4cCI6MjAwMH0.CMb9vzJ7E0_rhfASGsnzzkx1LntG0WI7xAyUl6IJw5U", "k3y-for-tests-only-7f2c", 1000) // {"sub":"42","exp":2000}
verify_jwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsImV4cCI6MjAwMH0.CMb9vzJ7E0_rhfASGsnzzkx1LntG0WI7xAyUl6IJw5U", "k3y-for-tests-only-7f2c", 2000) // null
verify_jwt("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3Iiwicm9sZSI6InVzZXIifQ.-65v9INTrERxjLZG1j-cFx9ztNjWoSC_BiCJbHl27a4", "k3y-for-tests-only-7f2c", 1000000000) // {"sub":"7","role":"user"}
Как подойти
Подсказки: 3
- Восстановите выравнивание:
s + "=" * (-len(s) % 4). - Сначала проверьте
alg, потом подпись, потом сроки. - Оберните разбор в try/except.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.