Header
JWT header bestaat uit token type en algoritme gebruikt voor ondertekening en codering. Algoritmen kunnen HMAC, SHA256, RSA, HS256 of RS256 zijn.
{
"typ": "JWT",
"alg": "HS256"
}
Payload
Payload bestaat uit de sessiegegevens die als claims worden genoemd. Hieronder zijn enkele van de standaard claims die we kunnen gebruiken,
- emittent (iss)
- Subject (sub)
- publiek (aud)
- Expiratietijd (exp)
- uitgegeven op (iat)
{
"sub": "user10001",
"iat": 1569302116
}
aangepaste claims kunnen ook worden opgenomen in de claimset. Bij gebruik van aangepaste claimsets,
- plaats geen grote gegevens in claimsets. Claimsets bedoeld om compact te zijn.
- plaats geen gevoelige informatie omdat JWT gemakkelijk kan worden gedecodeerd.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
Signature
Signature is het belangrijkste onderdeel van een JSON Web Token(JWT). Handtekening wordt berekend door de header en payload te coderen met behulp van Base64url-codering en deze aan te sluiten met een scheidingsteken voor een periode. Die vervolgens wordt gegeven aan de cryptografische algoritme.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
dus wanneer de header of payload verandert, moet de handtekening opnieuw worden berekend. Alleen de Identity Provider (IdP) heeft de private sleutel om de handtekening te berekenen die het knoeien met token voorkomt.
Hoe werkt het?
in principe genereert de identity provider(IdP) een JWT die de identiteit van de gebruiker certificeert en de bronserver decodeert en de authenticiteit van het token verifieert met behulp van geheime salt / public key.
- aanmelden door gebruiker met gebruikersnaam en wachtwoord of google / facebook.
- authenticatieserver controleert de referenties en geeft een JWT ondertekend met behulp van een geheime salt of een private sleutel.
- de Client van de gebruiker gebruikt de JWT om toegang te krijgen tot beveiligde bronnen door de JWT in HTTP autorisatie header door te geven.
- bronserver controleert vervolgens de authenticiteit van het token met behulp van de geheime salt/ public key.