Utilia

JWT генератор и проверка

Създавайте и проверявайте JSON Web Token с HS256, RS256, PS256, ES256 или EdDSA. Редактирайте полетата, задайте exp и iat и проверете подписа във вашия браузър.

Ключовете и токените са тайни. Всичко се подписва и проверява локално с Web Crypto API на вашия браузър: нищо не се качва.

Създаване на подписан JWT

Времеви полета:

Проверка на JWT

Как да създадете подписан JWT

  1. Изберете Алгоритъм: HS256/384/512 (споделена тайна), RS256/384/512 или PS256/384/512 (RSA), ES256/384/512 (ECDSA върху P-256, P-384 или P-521) или EdDSA (Ed25519, когато браузърът ви го поддържа).
  2. Редактирайте Хедър (JSON) и Съдържание (JSON полета). Полето alg винаги следва избрания алгоритъм, а typ по подразбиране е JWT.
  3. С бутоните за времеви полета добавяте дати: iat = сега, nbf = сега, или изберете срок като „след 1 час“ и щракнете върху Задай exp. Стойностите са NumericDate: секунди от 1 януари 1970 г. UTC.
  4. Въведете Тайна (за алгоритмите HS, като текст или Base64/Base64url чрез Формат на тайната) или Частен ключ (PEM или JWK). Още нямате ключ? Щракнете върху Генерирай тестов ключ.
  5. Щракнете върху Подпиши токена, после Копирай резултата или щракнете върху Провери този токен, за да го проверите веднага.

Как да проверите JWT

  1. Поставете токена в Токен за проверка.
  2. Изберете Очакван алгоритъм. Ако го оставите на „От хедъра на токена (никога none)“, се приема всичко, което пише в хедъра, освен none; ако изберете конкретен алгоритъм, инструментът отхвърля всеки токен, подписан по друг начин, както би направил истински сървър.
  3. Въведете тайната или Публичен ключ (PEM или JWK): PEM блок PUBLIC KEY, RSA PUBLIC KEY или CERTIFICATE, JWK или JWK Set (използва се ключът, чийто kid съвпада с хедъра).
  4. По желание задайте Толеранс на часовника (секунди), за да се допуснат малки разлики във времето, и щракнете върху Провери токена.

Резултатът показва дали подписът е валиден, после сверява exp (изтичане) и nbf (валиден от) с текущото време на вашия компютър. Токен с вярен подпис, но срок в миналото, се отчита като изтекъл, а не като валиден.

Ключове и формати

За подписване инструментът приема блокове PKCS#8 PRIVATE KEY, PKCS#1 RSA PRIVATE KEY и SEC1 EC PRIVATE KEY (вътрешно се преобразуват в PKCS#8) и частни JWK. Ключовете със защита с парола трябва първо да се експортират без парола. Генерирай тестов ключ създава случайна тайна с размера на хеша за алгоритмите HS, 2048-битова RSA двойка ключове за RS и PS, съответната крива за ES или двойка Ed25519. Ключовете се получават като PEM и JWK и се попълват и от двете страни, така че цикълът подписване–проверка работи веднага.

Подписите следват RFC 7515 и RFC 7518: RSA-PSS използва сол с дължината на хеша, а ECDSA подписите са суровата конкатенация r||s. Реализацията възпроизвежда примера за HS256 от RFC 7515, приложение A.1.

Бележки за сигурността

  • Всичко работи във вашия браузър с Web Crypto API. Нито токените, нито ключовете се изпращат някъде, но все пак предпочитайте тестови ключове пред производствени тайни.
  • alg: none никога не се подписва и никога не се приема.
  • HMAC тайните трябва да са поне колкото хеша (32 байта за HS256). По-кратка тайна води до предупреждение.
  • Подписът доказва цялост и произход, но не че полетата са подходящи: сървърите трябва да проверяват и iss, aud и обхватите (scopes).

Често задавани въпроси

Каква е разликата между HS256 и RS256?

HS256 използва една споделена тайна и за подписване, и за проверка, така че всеки, който проверява, може и да подправя токени. RS256 (както и PS256, ES256, EdDSA) подписва с частен ключ и проверява с публичен ключ, който може безопасно да се публикува.

Защо валиден подпис пак показва грешка?

Защото токенът е извън срока си на валидност: exp е в миналото или nbf е в бъдещето. Проверката на подписа и проверката на времето се отчитат поотделно.

Защо alg „none“ се отхвърля?

Неподписан токен може да създаде всеки. Приемането му е била класическа уязвимост в JWT библиотеките, затова този инструмент го отхвърля и при подписване, и при проверка.

Мога ли да използвам собствен RSA или EC ключ?

Да. Поставете частния ключ като PEM или JWK, за да подпишете, и публичния ключ, за да проверите. Инструментът проверява дали типът ключ и кривата съответстват на избрания алгоритъм.

Защо EdDSA е изключен?

Вашият браузър още не поддържа Ed25519 в Web Crypto. Новите версии на Chrome, Edge, Firefox и Safari го поддържат.