Ivverifika l-firma ta' JSON Web Token (JWT)

jivverifika l-firma ta' JWT (HS256, HS384, HS512, RS256, RS384, RS512) minn segret jew ċavetta pubblika, u jinspeziona l-claims tagħha
Għal HS256 / HS384 / HS512: l-istring segreta. Għal RS256 / RS384 / RS512: iċ-ċavetta pubblika f'format PEM.

Għaliex tivverifika l-firma ta 'JWT?

JSON Web Token (JWT) huwa mqassam fi tliet partijiet separati minn perjodi: header.payload.signature. Id-dekodifikazzjoni ta 'JWT hija sempliċement kwistjoni ta' qari tal-ewwel tnejn partijiet (li huma Base64URL). Kulħadd jista 'jagħmel dan, u kulħadd jistajagħmel a JWT bit-tagħbija tal-għażla tiegħek. Dak li jagħmel JWT affidabbli huwa biss il- firma: mingħajr verifika, l-aċċettazzjoni ta 'JWT jammonta għal kiri lil xi ħadd fid-dar tiegħek li jippretendi li hu xi ħadd, mingħajr ma jitlob identifikazzjoni.

Din l-għoddativverifika l-firmata’ JWT minn ċavetta. Huwa mhux sodisfatt bih jiddekowdja: jerġa 'jikkalkula l-firma mill-header, it-tagħbija u ċ-ċavetta tiegħek, imbagħad tqabbelha bil-firma tat-token. Jekk iż-żewġ jaqblu, it-token huwa awtentiku. Inkella kienet falsifikata, modifikat, jew iffirmat b'ċavetta oħra.

Il-verifika hija l-pedament ta 'kwalunkwe arkitettura li tuża JWTs biex awtentikazzjoni jew awtorizzazzjoni:mingħajr firma valida, it-tagħbija tista' tinsab. Attakkant li jimmodifika "role":"user" għal "role":"admin" ma jkollux diffikultà biex tagħmel dan jekk is-server iċċekkja biss il-format tat-token u mhux il-firma tiegħu.

Algoritmi komuni

L-ispeċifikazzjoni JWT (RFC 7518, JSON Web Algorithms) tiddefinixxi diversi familji ta 'algoritmi. Hawn hu l-aktar użati fil-produzzjoni:

  • HMAC (HS256, HS384, HS512): firma simmetrika bbażata fuq HMAC-SHA. Il- l-istess ċavetta sigrietajintuża għall-iffirmar u l-verifika. Sempliċi biex twaqqaf, effiċjenti, iżda kwalunkwe parti li kapaċi tivverifika t-token hija kapaċi wkoll toħroġha. Adattat għal xenarji fejn l-emittent u l-verifikatur huma l-istess tim jew dipartiment.
  • RSA (RS256, RS384, RS512): firma asimetrika. Ilċavetta privata sinjal, iċ-ċavetta pubblika tivverifika. Ideali meta t-trasmettitur u Il-verifikaturi huma entitajiet separati (OAuth2, OpenID Connect, Identity Federation). Huwa l-algoritmu iffavorit mill-biċċa l-kbira tal-fornituri tal-identità pubblika.
  • ECDSA (ES256, ES384): firma asimmetrika fuq kurvi ellittiċi. L-istess loġika bħal RSA (ċavetta privata biex tiffirma, ċavetta pubblika biex tivverifika) iżda biċ-ċwievet u firem aktar kompatti għal livell ekwivalenti ta’ sigurtà. Dejjem aktar mifruxa fi arkitetturi moderni.

Kif tipprovdi ċ-ċavetta

Il-format taċ-ċavetta mistennija jiddependi fuq l-algoritmu ddikjarat fl-header JWT:

  • HS256, HS384, HS512: iċ-ċavetta hija sekwenza sigrieta (sekwenza). Dan huwa s-sigriet kondiviż mal-emittent, ħafna drabi maħżun f'varjabbli ambjentali bħal JWT_SECRET. L-ebda ifformattjar speċjali, biss il-valur mhux maħdum.
  • RS256, RS384, RS512: iċ-ċavetta hijaċavetta pubblika RSA f'format PEM, li jibda b'-----BEGIN PUBLIC KEY----- u jispiċċa b' -----TMIEM EWLENIN PUBBLIKU-----. Żomm il-linji ġodda kif inhu, inkella OpenSSL jirrifjuta li jparsaha.
  • ES256, ES384: iċ-ċavetta hija ċavetta pubblika ECDSA f'format PEM, fuq il-kurva korrispondenti (P-256 għal ES256, P-384 għal ES384).

Eżempju ta’ ċavetta pubblika RSA mistennija

-----BEGIN EWLENIN PUBBLIKU-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx...
...vQIDAQAB
-----TMIEM EWLENIN PUBBLIKU-----

Kif taħdem il-verifika?

Is-server tagħna jirriproduċi eżattament l-operazzjoni mwettqa mit-trasmettitur:

  1. Tissepara l-JWT f'header, payload u firma.
  2. Tgħaqqad base64url(header) + "." + base64url(payload).
  3. Għal HMAC, tikkalkula HMAC-SHA-256/384/512 biċ-ċavetta sigrieta tiegħek, imbagħad tqabbel mal- firma riċevuta permezz ta' hash_equals (tqabbil ta' ħin kostanti biex jiġu evitati attakki ħin).
  4. Għal RSA, isejjaħ openssl_verify biċ-ċavetta pubblika tiegħek fil-format PEM.

Każijiet ta' użu

  • Debug tal-awtentikazzjoni tal-API: tirċievi 401, iċċekkja jekk it-token tiegħek huwiex iffirmat tajjeb biċ-ċavetta mistennija.
  • Validazzjoni ta’ token riċevut mingħand fornitur: sieħeb (Auth0, Keycloak, Cognito, Okta) jibgħatlek JWTs iffirmati f'RS256; trid tikkonferma li ġejjin minn minnu biċ-ċavetta pubblika tiegħu.
  • Verifika tas-sigurtà: ivverifika li servizz ta’ parti terza jiffirma b’mod korrett it-tokens tiegħu b'algoritmu robust, u mhux f'HS256 b'segretezza baxxa.
  • Testijiet manwali: iċċekkja li JWT iġġenerat mill-kodiċi tiegħek jgħaddi l- verifika biċ-ċavetta pubblika pprovduta.
  • Verifika ta' malajr ta' token riċevut: waqt l-integrazzjoni ta' SSO jew Partner API, iċċekkja fi ftit sekondi li l-firma/key chain taħdem qabel biex tikteb l-iċken linja ta 'kodiċi.

Kif tuża l-għodda

  1. Past il-JWT komplut (it-tliet partijiet separati b'tikek).
  2. Indika ċ-ċavetta adattata għall-algoritmu tal-header:
    • GħalHS256, HS384 jew HS512, iċ-ċavetta hija l-sekwenza sigrieta maqsumamat-trasmettitur. Hija string ħielsa, ħafna drabi maħżuna f'a varjabbli ambjentali bħal JWT_SECRET.
    • GħalRS256, RS384 jew RS512, iċ-ċavetta hija ċ-ċavetta pubblika fil-format PEM, li jibda b'-----BEGIN PUBLIC KEY-----u tispiċċa b' -----TMIEM EWLENIN PUBBLIKU-----.
  3. Mexxi l-kontroll. L-għodda turi l-istatus (validu jew invalidu) u t-tagħbija dekodifikata.

In-nases komuni li għandhom jiġu evitati

  • Algoritmu "xejn": l-ispeċifikazzjoni tippermetti alg: xejn, li tfisser "le firma". Difett klassiku jikkonsisti li tagħmel token b'din l-intestatura bit-tama li l- server jaċċettaha. L-għodda tagħna tirrifjuta sistematikamenttokens bi alg: xejn.
  • Konfużjoni HMAC vs RSA (konfużjoni tal-algoritmu): attakkant jibdel l-algoritmu RS256 għal HS256 u jiffirma t-tagħbija biċ-ċavetta pubblika RSA użata bħala sigriet HMAC. Jekk is-server ma jikkontrollax l-algoritmu, jaċċetta t-token. Dejjem illokkja l-algoritmu mistenni fuq in-naħa tas-server.
  • HMAC sigrieti hard-coded: sigriet kommess f'repożitorju Git jirrendi il-fiduċja kollha fit-tokens marret. Aħżen sigrieti fil-varjabbli ambjentali jew applikazzjoni sigura.
  • Ċavetta pubblika vs ċavetta privata: biex nivverifikaw JWT iffirmat f'RSA jew ECDSA, aħna jipprovdi ċ-ċavettapubblika, qatt dik privata. Il-privat jintuża biss għall-iffirmar u le qatt ma għandu joħroġ mit-trasmettitur.
  • Skadenza injorata: firma valida fuq token skadut m'għandhiex qatt tkun aċċettata. Ftakar li tiċċekkja exp u nbf.
  • Udjenza mhux ikkontrollata: token maħsub għall-API A m'għandux jiġi aċċettat mill-API B. Iċċekkja t-talba aud.

Talbiet temporali: exp u nbf

Lil hinn mill-firma, JWT validu għandu jirrispetta wkoll ir-restrizzjonijiet temporali tiegħu:

  • exp (skadenza): it-token m'għadux validu wara din id-data.
  • nbf (mhux qabel): it-token għadu mhux validu qabel din id-data.

L-għodda tagħna tindika b’mod espliċitu meta token ikunskadajewgħadu ma jkunx validu, anki jekk il-firma tiegħu hija korretta. Dan huwa importanti: firma valida fuq a Token skadut qatt ma għandu jiġi aċċettat fil-produzzjoni.

Differenza mad-decoder JWT tagħna

JWT decoder tagħna biss jiddekodifika l-header u tagħbija li tagħmilhom jinqraw. Ma twettaqebda verifika tal-firmau ma titlobx ċavetta. Użaha biex tispezzjona malajr il-kontenut ta 'token. Uża l- Verifikatur JWT (din il-paġna) kull meta jkollok bżonn tipprova li token huwa awtentiku. Biex tagħmel JWT iffirmat għall-ittestjar, uża tagħna bennej JWT.

Mistoqsijiet frekwenti

Għaliex RS256 minflok HS256?

Ma 'HS256, l-emittent u l-verifikatur jaqsmul-istess sigriet: kollox verifikatur jista' għalhekk joħroġ tokens. Huwa maniġġabbli meta tikkontrolla ż-żewġt itruf. Minn li qed nitkellmu dwar fornitur ta 'identità wieħed b'diversi servizzi tal-konsumatur, naqlbu f'RS256: it-trasmettitur iżomm iċ-ċavetta privata, aħna nqassmu ċ-ċavetta pubblika lill-APIs kollha li irid jiċċekkja. L-ebda API li tikkonsma ma tista 'mbagħad tifforma tokens.

Kif nista' nikseb iċ-ċavetta pubblika ta' Fornitur tal-Identità (IdP)?

Il-biċċa l-kbira tal-IdPs jesponu endpoint standardizzatJWKS (eż. https://example.com/.well-known/jwks.json). Dan l-endpoint jirritorna JSON li fih iċ-ċwievet pubbliċi attivi. Tista' tikkonverti l-entrata JWK li taqbel mal-kid mill-header tal-JWT tiegħek għal ċavetta PEM permezz tal-kmand openssl jew permezz ta' librerija JWKS mill-munzell tiegħek (eż. jose-jwt, jwks-rsa).

X'għandek tagħmel jekk il-verifika tfalli?

L-ewwel iċċekkja l-algoritmu: token iffirmat f'HS256 ma jistax jiġi vverifikat b'ċavetta RSA, u viċi versa. Imbagħad iċċekkja ċ-ċavetta: karattru abjad żejjed, linja ġdida waħda nieqsa f'ċavetta PEM, jew sigriet HMAC kemmxejn differenti minn dak użat mill-emittent huma biżżejjed biex ifallu l-kontroll. Jekk l-IdP wettaq rotazzjoni ewlenija, tiegħek kid jista' jindika ċavetta li m'għadx għandek.

X'inhu JWKS?

JWKS (JSON Web Key Set, RFC 7517) huwa format JSON li jiddeskrivi sett ta' ċwievet pubbliċi. Kull ċavetta hija identifikata minn kid (ID taċ-ċavetta) u l-JWT biex tiċċekkja jirreferi għal dan il-kid fl-intestatura tiegħu. Il-mekkaniżmu jippermetti lill-IdP li jdur tiegħu ċwievet mingħajr ma jiksru l-kontrolluri: huma sempliċiment jistaqsu l-endpoint JWKS biex jirkupraw il- ċavetta li tikkorrispondi mal-kid tat-token riċevut.

Kif niġġenera par ċwievet RSA biex niffirma l-JWT tiegħi?

Bl-OpenSSL: openssl genrsa -out private.pem 2048 imbagħad openssl rsa -in private.pem -pubout -out public.pem. Sinjal tal-ġenb taċ-ċavetta privata emittent, il-kontrolli taċ-ċavetta pubblika min-naħa tal-konsumatur. Għal servizzi ġodda, ippreferi 3072 jew 4096 bit.

Il-JWT għandu jiġi encrypted minbarra li jiffirmah (JWE)?

JWT iffirmat (JWS) jiggarantixxi l-integrità u l-awtentiċità, iżda l-payload tibqa’ tinqara minn min jiġborha. Jekk it-token fih data sensittiva (identifikaturi interni, drittijiet data dettaljata, personali), ikkunsidra l-formatJWE(JSON Web Encryption). li tikkodifika t-tagħbija minbarra li tiffirmaha.

Eżempju ta' talba

curl -X POST https://cdrn.fr/api/v1/tools/jwt-verifier/execute \
  -H "Content-Type: application/json" \
  -d '{"token":"...","key":"..."}'

Skema ta' input

Kamp Tip Meħtieġ Default
token text
key text

Endpoints

  • GET https://cdrn.fr/api/v1/tools - telenka l-għodod kollha disponibbli
  • GET https://cdrn.fr/api/v1/tools/jwt-verifier - tikseb l-iskema ta' din l-għodda
  • POST https://cdrn.fr/api/v1/tools/jwt-verifier/execute - teżegwixxi din l-għodda b'payload JSON