← JWT, JWS et JWE — architecture et validation avancées

Module 1 / 12 · 90 min

01. JWT : représentation et confiance

Séparer décodage, validation et interprétation métier.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Un JWT transporte un ensemble de claims selon un profil. Sa sérialisation ne rend pas les affirmations fiables : un texte décodé peut provenir d’un appelant hostile. Dans la forme compacte signée courante, les segments utilisent base64url, qui représente des octets sans fournir de confidentialité. Les claims enregistrés ne sont pas tous obligatoires dans le format générique ; le profil applicatif doit préciser présence, types et règles.

Raisonner et vérifier

Traitez tout résultat de parsing comme non authentifié tant que les vérifications du profil ne sont pas terminées. Ne sélectionnez pas un compte ou une permission sur un payload simplement décodé. Le parseur doit borner taille et profondeur et refuser les structures ambiguës selon la bibliothèque. Établissez une séparation claire entre données reçues, jeton validé et acteur autorisé.

Décodage sans confiance

Décoder un payload ne vérifie pas sa signature. Le parsing ne crée pas de relation de confiance. Un attaquant peut écrire lui-même un JSON avec role=admin et l’encoder. Tant que la validation de preuve et de profil n’a pas réussi, ne transmettez pas ces valeurs au contrôle de permissions.

Erreur fréquente à comprendre

Un JSON décodé prouve son authenticité.

Le parsing ne crée pas de relation de confiance.

Base64url

Base64url est réversible sans secret. La représentation n’apporte pas de confidentialité. Le codage permet de transporter des octets avec un alphabet adapté aux URL. Il ne demande aucune clé pour être inversé ; le payload d’une JWS courante reste donc lisible pour son porteur.

Erreur fréquente à comprendre

Base64url chiffre les claims.

La représentation n’apporte pas de confidentialité.

Profil explicite

Le profil impose les claims nécessaires. Les exigences dépendent aussi du profil consommateur. JWT est un format général. Votre contrat précise champs obligatoires, types, émetteur, audience et temporalité ; la présence de noms enregistrés ne rend pas tous ces champs obligatoires dans tout usage.

Erreur fréquente à comprendre

Le JWT générique impose tous les claims enregistrés.

Les exigences dépendent aussi du profil consommateur.

Avant validation

Les données parsées restent non fiables avant validation. La décision doit attendre les vérifications requises. Le parseur peut lire des champs nécessaires à une sélection contrôlée, mais ne doit pas leur accorder une confiance générale. Gardez une distinction claire entre objet parsé et objet validé utilisable par le métier.

Erreur fréquente à comprendre

Un champ role décodé peut immédiatement accorder admin.

La décision doit attendre les vérifications requises.

Budgets d’entrée

La taille du token doit être bornée. Le parsing et les calculs consomment des ressources. Limitez taille et complexité avant parsing ou vérification coûteuse. Une signature incorrecte sur une entrée énorme peut tout de même consommer mémoire et CPU avant son rejet final.

Erreur fréquente à comprendre

Une signature dispense de toute limite d’entrée.

Le parsing et les calculs consomment des ressources.

Bibliothèque maintenue

La signature doit être vérifiée par une bibliothèque adaptée. La forme n’établit pas la propriété cryptographique. Évitez d’implémenter cryptographie et validation JOSE par découpage de chaînes. Configurez une bibliothèque adaptée au profil, puis vérifiez ses options et ses refus avec des fixtures sans secrets réels.

Erreur fréquente à comprendre

Trois segments suffisent à démontrer une signature valide.

La forme n’établit pas la propriété cryptographique.

Acteur et permission

Le modèle doit distinguer acteur et droits. L’identité ne fournit pas une permission universelle. sub indique un sujet dans le contexte de l’émetteur ; il ne prouve pas la propriété de chaque facture. Après validation du jeton, appliquez les règles de tenant et de ressource.

Erreur fréquente à comprendre

Un subject connu possède tous les droits.

L’identité ne fournit pas une permission universelle.

Signé ou chiffré

Un JWT peut être signé ou chiffré selon son profil. Le format n’impose pas une protection unique. Les formes JWS et JWE répondent à des propriétés différentes. Le contrat doit annoncer ce qu’il attend ; reconnaître un nombre de segments n’authentifie pas le contenu et ne prouve pas sa confidentialité.

Erreur fréquente à comprendre

Tout JWT est nécessairement confidentiel.

Le format n’impose pas une protection unique.

Types des claims

Les types des claims doivent être vérifiés. La valeur doit respecter type et règles du profil. Un exp sous forme de tableau ne doit pas être converti opportunément en nombre. Vérifiez les types prescrits et le domaine des valeurs avant de comparer l’horloge ou d’interpréter une audience.

Erreur fréquente à comprendre

Un champ exp quelconque satisfait toujours le contrat temporel.

La valeur doit respecter type et règles du profil.

Refus sans effet

Les cas malformés doivent échouer sans effet métier. Le contrôle doit précéder les effets autorisés. Testez segments manquants, JSON invalide et valeurs hors contrat. Chaque échec doit arriver avant l’écriture métier, avec une réponse publique maîtrisée et sans journaliser le token brut.

Erreur fréquente à comprendre

Un parseur peut créer une session avant le refus de signature.

Le contrôle doit précéder les effets autorisés.

Atelier guidé : lire, expliquer et vérifier le code

{"sub":"lab-user","role":"admin","exp":4102444800}

État de l’exercice : JSON seulement décodé.
Signature, issuer et audience : non vérifiés.

Le JSON montré est seulement décodé. La valeur admin doit rester une affirmation hostile jusqu’à validation complète. Dessinez la séquence parsing borné, sélection de confiance, validation cryptographique, contrôle de profil puis autorisation. Placez un espion sur le service métier et vérifiez qu’il n’est jamais appelé dans l’état illustré.

La structure ne constitue pas une preuve d’origine et de profil. Un texte de rôle ne prouve pas son autorité. Une date ne valide pas la signature ni le destinataire. La syntaxe JSON ne donne pas de confiance.

Travail pratique : Décodez un jeton de laboratoire, modifiez un claim puis comparez le résultat du décodeur avec celui du validateur.

Critères de correction : Le décodeur peut montrer les deux payloads ; seul le validateur doit établir la confiance. Vérifiez que le jeton modifié n’atteint aucun service métier.

Apple Pay : un token à traiter, pas un résultat de paiement

Apple Pay fournit un objet de paiement contenant un token chiffré après l’authentification du client. Ce token transporte des données nécessaires au traitement, mais le recevoir dans le navigateur ne constitue pas une confirmation de capture ou d’acceptation par la chaîne bancaire.

Dans le cas posé, le PSP sait traiter ce token. Transmettez-le selon son intégration documentée, puis gérez résultat d’autorisation, éventuelle capture et notifications. Vérifiez l’association avec la commande, le montant et la référence d’opération, sans inventer un décodage JWT générique : les tokens ne sont pas interchangeables du seul fait de leur nom.

Utilisez l’environnement de test du fournisseur et distinguez token reçu, traitement en cours, refus et résultat confirmé. Une interface qui affiche payé dès le callback navigateur peut diverger du backend. Conservez un état durable et un mécanisme de rapprochement pour les réponses perdues et événements asynchrones, sans journaliser les données sensibles du token.

Points de vigilance : L’authentification de l’utilisateur et l’approbation financière par l’émetteur sont distinctes. Le PSP peut effectuer le traitement cryptographique ; ce n’est pas une obligation du navigateur. Le token transporte les données nécessaires au traitement ; il ne remplace pas la réponse de la chaîne de paiement. Le cryptogramme de paiement n’est pas un jeton réutilisable pour des transactions distinctes.

Documentation de référence ↗

Exemple commenté

Entrée brute → parsing borné → validation du profil → acteur → autorisation

Cette chaîne est un contrat d’architecture, pas un algorithme cryptographique à réimplémenter.

Exercice de mise en pratique

Décodez un jeton de laboratoire, modifiez un claim puis comparez le résultat du décodeur avec celui du validateur.

Voir une proposition de correction

Le décodeur peut montrer les deux payloads ; seul le validateur doit établir la confiance. Vérifiez que le jeton modifié n’atteint aucun service métier.

Points de vérification

  • Aucun privilège au parsing.
  • Profil explicite.
  • Entrée bornée.

Contrôle de connaissances

Cours associé : 01. JWT : représentation et confiance ↗
Que prouve un payload JWT décodé ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →