Верификатор JWT
Проверьте, подлинный ли веб-токен JSON и не истёк ли срок его действия. Вставьте токен вместе с секретом HMAC, открытым ключом PEM, сертификатом, JWK или целым JWKS. Верификатор проверит подпись с помощью библиотеки jose, сравнит exp и nbf с текущим временем с учётом необязательного допуска часов и покажет понятный результат рядом с декодированными заголовком и утверждениями. Токены с alg none отклоняются.
Часто задаваемые вопросы
Что проверяет верификатор?
Он проверяет подпись с помощью указанного вами ключа, а затем сравнивает утверждения exp и nbf с текущим временем. Токен признаётся действительным, только если подпись совпадает и обе проверки времени пройдены. Утверждения, такие как iss, aud или sub, отображаются в полезной нагрузке, но не сравниваются с ожидаемыми значениями.
Какие ключи можно вставить?
Для HS256, HS384 и HS512 вставьте общий секрет в виде текста или oct JWK. Для токенов RSA, EC и EdDSA вставьте открытый ключ PEM (SPKI или PKCS #1), сертификат X.509, открытый или закрытый JWK, JWKS с числом ключей до 50 либо закрытый ключ PEM, из которого используется только открытая часть.
Как из JWKS выбирается нужный ключ?
Если в заголовке токена есть kid, используется ключ с таким же kid из набора; если совпадений нет, в сообщении об ошибке указывается kid. Если kid нет, в наборе должен быть ровно один ключ. Так же выбирают ключи большинство серверов из документа jwks_uri.
Для чего нужен параметр алгоритма?
При выборе «Использовать alg токена» алгоритм берется из заголовка токена, но ключ все равно должен ему соответствовать: открытый ключ RSA нельзя использовать как секрет HMAC. Выберите конкретный алгоритм, чтобы также требовать его использования в токене — именно так сервер должен фиксировать ожидаемый алгоритм. Токен с другим alg будет отклонен, причем будут указаны оба названия.
Почему токен с alg none отклоняется?
Токен с alg none не содержит подписи, поэтому проверять нечего и создать его мог кто угодно. Поддержка таких токенов — известная уязвимость в библиотеках JWT. Проверяющий сообщает об ошибке, а не о действительном результате.
Как работают exp, nbf и допуск расхождения часов?
Токен считается просроченным, если exp меньше или равен текущему времени, и еще не действительным, если nbf позже текущего времени. Допуск расхождения часов от 0 до 3600 секунд расширяет обе проверки, чтобы учесть рассинхронизацию часов серверов. Если присутствующие утверждения не имеют числовых значений, токен считается недействительным.
Что означает недействительная подпись?
Токен подписан не предоставленным вами ключом либо его заголовок или полезная нагрузка были изменены после подписания. Убедитесь, что вставили соответствующий открытый ключ или секрет без изменений и скопировали токен целиком. Декодированные заголовок и полезная нагрузка все равно отображаются, чтобы вы могли их сравнить.
Какие алгоритмы поддерживаются?
HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 и EdDSA с ключами Ed25519. Длина ключей RSA должна составлять не менее 2048 бит. Зашифрованные токены (JWE) не расшифровываются.
Сохраняются ли токен или ключ?
Нет. Токен и ключ используются только для этой проверки в памяти и никогда не записываются в журналы и не сохраняются. Открытым ключом можно безопасно делиться, но с секретами HMAC следует обращаться осторожно; замените любой секрет, который, по вашему мнению, мог быть раскрыт.
Каковы максимальные размеры токена и ключа?
Длина токена может составлять до 65,536 символов, а поля ключа — до 262,144 символов, чего достаточно для больших документов JWKS. Токен должен состоять из трех частей в формате base64url, разделенных точками, иметь заголовок JSON с элементом alg и объект JSON в качестве полезной нагрузки.