En-tête
L’en-tête JWT comprend le type de jeton et l’algorithme utilisés pour la signature et l’encodage. Les algorithmes peuvent être HMAC, SHA256, RSA, HS256 ou RS256.
{
"typ": "JWT",
"alg": "HS256"
}
Charge utile
La charge utile se compose des données de session appelées en tant que revendications. Voici quelques-unes des revendications standard que nous pouvons utiliser,
- Emetteur (iss)
- Sujet (sub)
- Public (aud)
- Délai d’expiration (exp)
- Émis à (iat)
{
"sub": "user10001",
"iat": 1569302116
}
Les revendications personnalisées peuvent également être incluses dans l’ensemble de revendications. Lors de l’utilisation d’ensembles de revendications personnalisés,
- Ne mettez pas de données volumineuses dans des ensembles de réclamations. Les ensembles de réclamations sont conçus pour être compacts.
- Ne mettez pas d’informations sensibles car, JWT peut être décodé facilement.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
Signature
La signature est la partie la plus importante d’un jeton Web JSON (JWT). La signature est calculée en codant l’en-tête et la charge utile à l’aide du codage Base64url et en les concaténant avec un séparateur de période. Ce qui est ensuite donné à l’algorithme cryptographique.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
Donc, lorsque l’en-tête ou la charge utile change, la signature doit à nouveau être calculée. Seul le fournisseur d’identité (IdP) dispose de la clé privée pour calculer la signature, ce qui empêche la falsification du jeton.
Comment ça marche ?
Fondamentalement, le fournisseur d’identité (IdP) génère un JWT certifiant l’identité de l’utilisateur et le serveur de ressources décode et vérifie l’authenticité du jeton à l’aide de la clé secrète salt / public.
- Connexion de l’utilisateur à l’aide d’un nom d’utilisateur et d’un mot de passe ou de google/ facebook.
- Le serveur d’authentification vérifie les informations d’identification et émet un jwt signé à l’aide d’un sel secret ou d’une clé privée.
- Le client de l’utilisateur utilise le JWT pour accéder aux ressources protégées en transmettant l’en-tête d’autorisation JWT in HTTP.
- Le serveur de ressources vérifie ensuite l’authenticité du jeton à l’aide de la clé secrète salt/public.