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; ако изберете одреден алгоритам, алатката одбива секој токен потпишан поинаку, како што треба да прави вистински сервер.
  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 го поддржуваат.