nou: obțineți manualul JWT gratuit și învățați JWTs în profunzime!
ce este JSON Web Token?
JSON Web Token (JWT) este un standard deschis (RFC 7519) care definește un mod compact și autonom pentru transmiterea în siguranță a informațiilor între părți ca obiect JSON. Aceste informații pot fi verificate și de încredere, deoarece sunt semnate digital. JWTs poate fi semnat folosind un secret (cu algoritmul HMAC) sau o pereche de chei publice/private folosind RSA sau ECDSA.,deși JWTs pot fi criptate pentru a oferi, de asemenea, secretul între părți, ne vom concentra pe token-uri semnate. Jetoanele semnate pot verifica integritatea revendicărilor conținute în acesta, în timp ce jetoanele criptate ascund aceste revendicări de la alte părți. Când jetoanele sunt semnate folosind perechi de chei publice / private, semnătura certifică, de asemenea, că numai partea care deține cheia privată este cea care a semnat-o.
când ar trebui să utilizați jetoanele web JSON?
iată câteva scenarii în care jetoanele web JSON sunt utile:
-
autorizare: acesta este cel mai frecvent scenariu pentru utilizarea JWT., Odată ce utilizatorul este conectat, fiecare cerere ulterioară va include JWT, permițând utilizatorului să acceseze rute, servicii și resurse care sunt permise cu acel simbol. Single Sign On este o caracteristică care utilizează pe scară largă JWT în zilele noastre, din cauza aeriene sale mici și capacitatea sa de a fi ușor de utilizat în diferite domenii.schimbul de informații: jetoanele web JSON sunt o modalitate bună de a transmite în siguranță informații între părți. Deoarece JWTs pot fi semnate—de exemplu, folosind perechi de chei publice/private-puteți fi siguri că expeditorii sunt cine spun că sunt., În plus, pe măsură ce semnătura este calculată folosind antetul și sarcina utilă, puteți verifica, de asemenea, dacă conținutul nu a fost modificat.
care este structura jetonului web JSON?
În formă compactă, JSON Web Token-uri compus din trei părți separate prin puncte (.
), care sunt:
- Antet
- Sarcină
- Semnătura
prin Urmare, o JWT, de obicei, arată în felul următor.
xxxxx.yyyyy.zzzzz
să descompunem diferitele părți.,
Header
antetul constă de obicei din două părți: tipul tokenului, care este JWT, și algoritmul de semnare utilizat, cum ar fi HMAC SHA256 sau RSA.
De exemplu:
{ "alg": "HS256", "typ": "JWT"}
Apoi, acest JSON este Base64Url codificate pentru a forma prima parte a JWT.
sarcină utilă
a doua parte a tokenului este sarcina utilă, care conține revendicările. Revendicările sunt declarații despre o entitate (de obicei, utilizatorul) și date suplimentare.Există trei tipuri de creanțe: creanțe înregistrate, publice și private.,revendicări înregistrate: acestea sunt un set de revendicări predefinite care nu sunt obligatorii, dar recomandate, pentru a furniza un set de revendicări utile, interoperabile. Unele dintre ele sunt: iss (emitent), exp (timp de expirare), sub (subiect), aud (audiență) și altele.
observați că numele revendicării au doar trei caractere în timp ce JWT este menit să fie compact.
creanțelor Publice: Acestea pot fi definite în funcție de cei care folosesc JWTs., Dar pentru a evita coliziunile, acestea ar trebui definite în Registrul jetoanelor web IANA JSON sau să fie definite ca URI care conține un spațiu de nume rezistent la coliziune.revendicări Private: acestea sunt revendicările personalizate create pentru a partaja informații între părți care sunt de acord să le utilizeze și nu sunt revendicări înregistrate sau publice.
exemplu de utilă ar putea fi:
{ "sub": "1234567890", "name": "John Doe", "admin": true}
este utilă atunci Base64Url codificate pentru a forma cea de-a doua parte a JSON Web Token.,
rețineți că pentru jetoanele semnate aceste informații, deși protejate împotriva manipulării frauduloase, pot fi citite de oricine. Nu puneți informații secrete în elementele de sarcină utilă sau antet ale unui JWT decât dacă este criptat.
Semnătura
Pentru a crea semnătura parte va trebui să ia codificat antet, codat utilă, un secret, algoritmul specificat în antet, și semn că.,
De exemplu, dacă doriți să utilizați HMAC SHA256 algoritm, semnătura va fi creat în felul următor:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
semnătura este folosit pentru a verifica dacă mesajul nu s-a schimbat de-a lungul drum, și, în caz de jetoane semnat cu o cheie privată, se poate verifica, de asemenea, că expeditorul JWT este cine spune că este.
punând toate împreună
ieșirea este de trei șiruri Base64-URL separate prin puncte care pot fi transmise cu ușurință în mediile HTML și HTTP, fiind în același timp mai compact în comparație cu standardele bazate pe XML, cum ar fi SAML.,
următorul arată un JWT care are antetul anterior și sarcina utilă codificată și este semnat cu un secret.
Dacă vrei să joci cu JWT și a pus aceste concepte în practică, puteți utiliza jwt.io Debugger pentru a decoda, de a verifica, și de a genera JWTs.
cum funcționează jetoanele web JSON?
în autentificare, atunci când utilizatorul se conectează cu succes folosind acreditările, un jeton web JSON va fi returnat. Deoarece jetoanele sunt acreditări, trebuie să aveți mare grijă pentru a preveni problemele de securitate., În general, nu trebuie să păstrați jetoanele mai mult decât este necesar.de asemenea, nu trebuie să stocați date sensibile despre sesiuni în spațiul de stocare al browserului din cauza lipsei de securitate.ori de câte ori utilizatorul dorește să acceseze o rută sau o resursă protejată, agentul utilizator ar trebui să trimită JWT, de obicei în antetul de autorizare folosind schema purtător. Conținutul antetului ar trebui să arate astfel:
Authorization: Bearer <token>
acesta poate fi, în anumite cazuri, un mecanism de autorizare apatrid., Rutele protejate ale serverului vor verifica dacă există un JWT valid în antetul Authorization
, iar dacă este prezent, utilizatorului i se va permite să acceseze resurse protejate. Dacă JWT conține datele necesare, necesitatea de a interoga baza de date pentru anumite operații poate fi redusă, deși acest lucru nu poate fi întotdeauna cazul.
dacă tokenul este trimis în antetul Authorization
, partajarea resurselor de origine încrucișată (CORS) nu va fi o problemă, deoarece nu utilizează cookie-uri.,
următoarea diagramă arată cum un JWT este obținut și utilizat pentru a accesa Api-uri sau resurse:
- cererea sau cererile clientului autorizarea de a autorizației de server. Aceasta se realizează printr-unul dintre diferitele fluxuri de autorizare. De exemplu, o aplicație web compatibilă cu OpenID Connect va trece prin punctul final
/oauth/authorize
folosind fluxul de cod de autorizare. - când se acordă autorizația, serverul de autorizare returnează un jeton de acces la aplicație.,
- aplicația utilizează tokenul de acces pentru a accesa o resursă protejată (cum ar fi un API).rețineți că, cu jetoanele semnate, toate informațiile conținute în token sunt expuse utilizatorilor sau altor părți, chiar dacă nu sunt în măsură să-l schimbe. Aceasta înseamnă că nu ar trebui să puneți informații secrete în token.
De ce ar trebui să folosim jetoanele web JSON?
Să vorbim despre beneficiile jetoanelor web JSON (JWT) în comparație cu jetoanele web Simple (SWT) și jetoanele de limbaj de marcare a afirmațiilor de securitate (SAML).,deoarece JSON este mai puțin verbose decât XML, atunci când este codificat dimensiunea sa este, de asemenea, mai mică, ceea ce face JWT mai compact decât SAML. Acest lucru face JWT o alegere bună pentru a fi trecut în HTML și HTTP medii.din punct de vedere al securității, SWT poate fi semnat simetric doar printr-un secret partajat folosind algoritmul HMAC. Cu toate acestea, jetoanele JWT și SAML pot utiliza o pereche de chei publice/private sub forma unui certificat X. 509 pentru semnare. Semnarea XML cu semnătura digitală XML fără a introduce găuri de securitate obscure este foarte dificilă în comparație cu simplitatea semnării JSON.,
parserele JSON sunt comune în majoritatea limbajelor de programare, deoarece mapează direct la obiecte. În schimb, XML nu are o mapare naturală document-la-obiect. Acest lucru face mai ușor de a lucra cu JWT decât afirmațiile SAML.în ceea ce privește utilizarea, JWT este utilizat la scară Internet. Acest lucru evidențiază ușurința procesării din partea clientului a jetonului web JSON pe mai multe platforme, în special mobile.,
Compararea lungimii de un codat JWT și un codat SAML
Dacă doriți să citiți mai multe despre JSON Web Token-uri și chiar începe să utilizați-le pentru a efectua autentificarea în propriile aplicații, navigați la JSON Web Token pagina de destinație la Auth0.
Leave a Reply