Header
JWT header består av token typ och algoritm som används för signering och kodning. Algoritmer kan vara HMAC, SHA256, RSA, HS256 eller RS256.
{
"typ": "JWT",
"alg": "HS256"
}
nyttolast
nyttolast består av sessionsdata som kallas som fordringar. Nedan följer några av de standardkrav som vi kan använda,
- Emittent(ISS)
- ämne (sub)
- publik (aud)
- utgångstid (exp)
- utfärdad vid (iat)
{
"sub": "user10001",
"iat": 1569302116
}
anpassade anspråk kan också inkluderas i anspråk. När du använder anpassade anspråk,
- lägg inte stora data i anspråk. Anspråk som är avsedda att vara kompakta.
- lägg inte känslig information eftersom JWT enkelt kan avkodas.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
signatur
signatur är den viktigaste delen av en JSON Web Token(JWT). Signaturen beräknas genom att koda rubriken och nyttolasten med Base64url-kodning och sammanfoga dem med en periodseparator. Som sedan ges till den kryptografiska algoritmen.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
så när rubriken eller nyttolasten ändras måste signaturen beräknas igen. Endast identitetsleverantören (IdP) har den privata nyckeln för att beräkna signaturen som förhindrar manipulering av token.
hur fungerar det?
i grund och botten genererar identitetsleverantören(IdP) en JWT-certifierande användaridentitet och Resursserver avkodar och verifierar äktheten hos token med hemlig salt / offentlig nyckel.
- Användarinloggning med användarnamn och lösenord eller google/facebook.
- autentiseringsserver verifierar autentiseringsuppgifterna och utfärdar en JWT signerad med antingen ett hemligt salt eller en privat nyckel.
- användarens klient använder JWT för att komma åt skyddade resurser genom att skicka JWT i HTTP-Auktoriseringshuvudet.
- Resursserver verifierar sedan äktheten av token med den hemliga salt / offentliga nyckeln.