Documentation
Apprenez ce qu'est JWT et comment l'utiliser dans vos applications.
Qu'est-ce que JWT ?
JSON Web Token (JWT) est un standard ouvert (RFC 7519) qui définit un moyen compact de transmettre des informations de manière sécurisée.
Structure JWT
Un JWT se compose de trois parties séparées par des points : Header.Payload.Signature.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cEn-tête
Contient les métadonnées du token : algorithme (alg) et type (typ).
Payload
Contient les claims (déclarations) sur une entité et des métadonnées.
Signature
Vérifie que le token n'a pas été modifié. Créée en signant l'en-tête et le payload encodés.
Claims Courants
iss (Issuer) : identifie l'émetteur du token
sub (Subject) : identifie le sujet du token
aud (Audience) : identifie les destinataires du token
exp (Expiration) : date d'expiration (timestamp Unix)
nbf (Not Before) : date avant laquelle le token ne doit pas être accepté
iat (Issued At) : date d'émission du token
Algorithmes Supportés
JWT supporte plusieurs algorithmes de signature.
HS256 / HS384 / HS512
HMAC avec SHA-2 — signature symétrique
RS256 / RS384 / RS512
RSA avec SHA-2 — signature asymétrique
ES256 / ES384 / ES512
ECDSA avec SHA-2 — signature asymétrique à courbe elliptique
EdDSA (Ed25519)
EdDSA — signature moderne à courbe elliptique Ed25519
Exemples de Code
Extraits de code prêts à l'emploi pour JWT dans plusieurs langages.
const jwt = require('jsonwebtoken');
// Sign
const token = jwt.sign(
{ sub: '1234567890', name: 'John Doe' },
'your-secret-key',
{ algorithm: 'HS256', expiresIn: '1h' }
);
// Verify
const decoded = jwt.verify(token, 'your-secret-key');
console.log(decoded);import { SignJWT, jwtVerify } from 'jose';
// Sign
const secret = new TextEncoder().encode('your-secret-key');
const token = await new SignJWT({ sub: '1234567890', name: 'John Doe' })
.setProtectedHeader({ alg: 'HS256' })
.setExpirationTime('1h')
.sign(secret);
// Verify
const { payload } = await jwtVerify(token, secret);
console.log(payload);import jwt
# Sign
token = jwt.encode(
{"sub": "1234567890", "name": "John Doe"},
"your-secret-key",
algorithm="HS256"
)
# Verify
decoded = jwt.decode(token, "your-secret-key", algorithms=["HS256"])
print(decoded)import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
// Sign
String token = Jwts.builder()
.setSubject("1234567890")
.claim("name", "John Doe")
.signWith(SignatureAlgorithm.HS256, "your-secret-key")
.compact();
// Verify
Claims claims = Jwts.parser()
.setSigningKey("your-secret-key")
.parseClaimsJws(token)
.getBody();import (
"github.com/golang-jwt/jwt/v5"
)
// Sign
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"sub": "1234567890",
"name": "John Doe",
})
tokenString, err := token.SignedString([]byte("your-secret-key"))
// Verify
parsed, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
return []byte("your-secret-key"), nil
})
claims := parsed.Claims.(jwt.MapClaims)require 'jwt'
payload = { sub: '1234567890', name: 'John Doe' }
# Sign
token = JWT.encode(payload, 'your-secret-key', 'HS256')
# Verify
decoded = JWT.decode(token, 'your-secret-key', true, algorithm: 'HS256')
puts decoded[0]use Firebase\JWT\JWT;
$payload = [
'sub' => '1234567890',
'name' => 'John Doe',
];
// Sign
$token = JWT::encode($payload, 'your-secret-key', 'HS256');
// Verify
$decoded = JWT::decode($token, new Key('your-secret-key', 'HS256'));
print_r($decoded);use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, DecodingKey};
// Sign
let token = encode(
&Header::new(Algorithm::HS256),
&serde_json::json!({"sub": "1234567890", "name": "John Doe"}),
&EncodingKey::from_secret("your-secret-key".as_ref()),
)?;
// Verify
let token_data = decode::<serde_json::Value>(
&token,
&DecodingKey::from_secret("your-secret-key".as_ref()),
&Validation::new(Algorithm::HS256),
)?;using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;
var securityKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("your-secret-key"));
// Sign
var token = new JwtSecurityToken(
claims: new[] { new Claim("sub", "1234567890"), new Claim("name", "John Doe") },
signingCredentials: new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256)
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
// Verify
var principal = new JwtSecurityTokenHandler().ValidateToken(tokenString,
new TokenValidationParameters { ValidateIssuerSigningKey = true,
IssuerSigningKey = securityKey, ValidateIssuer = false, ValidateAudience = false },
out _);import JWT
// Sign
let payload = JWTPayload(sub: "1234567890", name: "John Doe")
let signer = JWTSigner.hs256(key: Data("your-secret-key".utf8))
let token = try signer.sign(payload)
// Verify
let verifier = JWTVerifier.hs256(key: Data("your-secret-key".utf8))
let verified = try verifier.verify(token)