antet
antet JWT este format din tip token și algoritmul utilizat pentru semnarea și codificare. Algoritmii pot fi HMAC, SHA256, RSA, HS256 sau RS256.
{
"typ": "JWT",
"alg": "HS256"
}
sarcina utilă
sarcina utilă constă din datele sesiunii numite ca revendicări. Mai jos sunt câteva dintre revendicările standard pe care le putem folosi,
- emitent(iss)
- subiect (sub)
- audiență (aud)
- timp de EXPIRARE (exp)
- emis la (iat)
{
"sub": "user10001",
"iat": 1569302116
}
revendicările personalizate pot fi, de asemenea, incluse în setul de revendicări. Când utilizați seturi de revendicări personalizate,
- nu puneți date mari în seturile de revendicări. Seturi de revendicare menite să fie compacte.
- nu puneți informații sensibile, deoarece JWT poate fi decodat cu ușurință.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
semnătura
semnătura este cea mai importantă parte a unui JSON Web Token(JWT). Semnătura este calculată prin codificarea antetului și a sarcinii utile folosind codificarea Base64url și concatenarea acestora cu un separator de perioade. Care este apoi dat algoritmului criptografic.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
deci, atunci când modificările antet sau sarcină utilă, semnătura trebuie să calculat din nou. Numai furnizorul de identitate (IdP) are cheia privată pentru a calcula semnătura care împiedică manipularea tokenului.
cum funcționează?
practic furnizorul de identitate(IdP) generează un JWT care certifică identitatea utilizatorului și serverul de resurse decodează și verifică autenticitatea jetonului folosind sare secretă / cheie publică.
- conectare utilizator folosind numele de utilizator și parola sau google/facebook.
- serverul de autentificare verifică acreditările și emite un jwt semnat folosind fie o sare secretă, fie o cheie privată.
- Clientul utilizatorului utilizează JWT pentru a accesa resursele protejate prin trecerea JWT în antetul de autorizare HTTP.
- Resource server verifică apoi autenticitatea jetonului folosind cheia secretă sare/ publică.