Standards JOSE et JWT : RFC 7515 à 7519
Si vous avez déjà implémenté une authentification web moderne, vous avez probablement utilisé des JSON Web Tokens (JWT). Mais le JWT n'est qu'une pièce d'une famille plus large de normes connues sous le nom de JOSE (JSON Object Signing and Encryption). Comprendre la relation entre ces normes est crucial pour créer des applications sécurisées.
Dans ce guide, nous explorerons les cinq RFC de base qui composent la pile JOSE :
- RFC 7515 : JWS (JSON Web Signature)
- RFC 7516 : JWE (JSON Web Encryption)
- RFC 7517 : JWK (JSON Web Key)
- RFC 7518 : JWA (JSON Web Algorithms)
- RFC 7519 : JWT (JSON Web Token)
1. RFC 7515 : JSON Web Signature (JWS)
Le JWS est la forme la plus courante de JWT. Il garantit que le contenu du jeton n'a pas été altéré. Il assure l'intégrité et l'authenticité, mais pas la confidentialité (le contenu est toujours visible par quiconque voit le jeton).
Structure :
Un JWS est généralement représenté au format Compact Serialization, qui comporte trois parties séparées par des points :
BASE64URL(Header) . BASE64URL(Payload) . BASE64URL(Signature)
- Header (En-tête) : Spécifie l'algorithme utilisé pour la signature (ex:
{"alg": "HS256"}). - Payload (Charge utile) : Les données réelles signées.
- Signature : Le résultat de la signature de l'en-tête et de la charge utile.
2. RFC 7516 : JSON Web Encryption (JWE)
Alors que le JWS assure l'intégrité, le JWE assure la confidentialité. Il chiffre la charge utile pour que seul le destinataire prévu puisse la lire.
Structure :
La sérialisation compacte JWE comporte cinq parties :
BASE64URL(Header) . BASE64URL(Encrypted Key) . BASE64URL(Initialization Vector) . BASE64URL(Ciphertext) . BASE64URL(Authentication Tag)
Le JWE est souvent utilisé lorsque le jeton contient des informations sensibles, telles que des PII (informations personnellement identifiables), qui ne doivent pas être visibles par le client ou les proxys intermédiaires.
3. RFC 7517 : JSON Web Key (JWK)
Un JWK est une structure de données JSON qui représente une clé cryptographique. Il est utilisé pour partager des clés publiques entre serveurs de manière standardisée.
Exemple :
{
"kty": "RSA",
"use": "sig",
"kid": "1b94c",
"n": "vXl...",
"e": "AQAB"
}
Une collection de JWK est appelée JWKS (JSON Web Key Set), souvent trouvée sur un point de terminaison comme /.well-known/jwks.json.
4. RFC 7518 : JSON Web Algorithms (JWA)
Le JWA est le "dictionnaire" de la pile JOSE. Il définit les algorithmes spécifiques utilisés pour la signature (JWS) et le chiffrement (JWE).
Algorithmes courants :
- HS256 : HMAC utilisant SHA-256 (Symétrique).
- RS256 : RSASSA-PKCS1-v1_5 utilisant SHA-256 (Asymétrique).
- ES256 : ECDSA utilisant P-256 et SHA-256 (Asymétrique).
- A128GCM : AES GCM utilisant une clé de 128 bits (Chiffrement).
5. RFC 7519 : JSON Web Token (JWT)
Le JWT est une application de JWS ou JWE où la charge utile est un ensemble de Claims (Revendications). Les revendications sont des informations sur une entité (généralement un utilisateur).
Revendications standard :
iss: Émetteur (Issuer)sub: Sujet (Subject, généralement l'ID utilisateur)aud: Audienceexp: Temps d'expirationiat: Émis à (Issued At)
Comparaison récapitulative
| Norme | Objectif | Analogie |
|---|---|---|
| JWS | Intégrité | Une lettre signée |
| JWE | Confidentialité | Une enveloppe cryptée |
| JWK | Représentation des clés | Un fichier de clé publique |
| JWA | Catalogue d'algorithmes | Une liste de chiffrements |
| JWT | Format de données | Le jeton lui-même |
FAQ
Q : Un JWT est-il toujours un JWS ? R : Pas toujours, mais dans 99 % des cas, oui. Un JWT peut être un JWS (signé), un JWE (chiffré) ou même un JWT non sécurisé (sans signature).
Q : Dois-je utiliser RS256 ou HS256 ? R : RS256 (Asymétrique) est généralement préféré pour les jetons d'identité car il permet au client de vérifier la signature sans avoir besoin de la clé privée. HS256 (Symétrique) est plus rapide mais nécessite le partage d'un secret.
Q : Où puis-je voir ce qu'il y a dans un JWT ? R : Comme les charges utiles JWS sont simplement encodées en Base64, vous pouvez les décoder facilement. Cependant, vous ne devez jamais faire confiance aux données sans avoir vérifié la signature.
Outils connexes
- Décodeur JWT - Décodez et inspectez instantanément les jetons JWS/JWT.
- Générateur de hachage - Générez des hachages pour une vérification manuelle.
- Générateur de mots de passe - Créez des secrets sécurisés pour la signature HS256.