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

Module 5 / 12 · 90 min

05. Algorithmes imposés et profils disjoints

Empêcher le jeton reçu de choisir lui-même sa politique de validation.

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

L’en-tête JOSE arrive de l’extérieur. Le validateur doit vérifier que l’algorithme reçu appartient à une liste autorisée pour cette clé et cet usage. Il ne doit pas utiliser indifféremment des octets de clé publique comme secret MAC. L’acceptation d’un algorithme non signé ne doit jamais apparaître accidentellement dans un profil qui exige une signature.

Raisonner et vérifier

Séparez les validateurs de contextes différents : accès API, identité utilisateur et message interne peuvent avoir des règles incompatibles. Un type explicite peut aider à distinguer les profils lorsque leur spécification le prévoit, avec un contrôle effectif côté réception. Préférez les mécanismes de la bibliothèque aux branches manuelles sur alg. Testez des clés et types incohérents même lorsque la syntaxe du token est correcte.

Politique fermée

Le serveur fixe les algorithmes admis. L’entrée non fiable ne définit pas la politique. Une liste telle que RS256 est choisie côté validateur. Le porteur ne peut pas obtenir none ou une famille MAC en modifiant le header ; toute valeur hors contrat doit être rejetée.

Erreur fréquente à comprendre

alg reçu peut élargir librement la liste.

L’entrée non fiable ne définit pas la politique.

Compatibilité de clé

La clé doit être compatible avec l’algorithme. La confusion de familles doit être évitée. Associez chaque clé à son type, son algorithme et son usage. Une bibliothèque polyvalente ne doit pas traiter opportunément les octets d’une clé publique comme un secret MAC pour un autre profil.

Erreur fréquente à comprendre

Des octets de clé publique peuvent servir arbitrairement de secret MAC.

La confusion de familles doit être évitée.

Signature exigée

Un profil signé doit refuser une absence de signature. La signature requise ne peut être retirée par le message. Un profil signé refuse l’absence de preuve même si le JSON est correctement formé. Testez explicitement le cas non signé afin de vérifier qu’un mode de compatibilité ne contourne pas cette exigence.

Erreur fréquente à comprendre

none convient automatiquement à tout validateur JWT.

La signature requise ne peut être retirée par le message.

Type explicite

Un type explicite doit être vérifié lorsqu’il est requis. La déclaration doit participer à la décision. Lorsque le profil exige typ, comparez sa valeur attendue. Cette information contribue à séparer les usages, mais n’établit une confiance que lorsqu’elle fait partie des données protégées et validées.

Erreur fréquente à comprendre

Afficher typ suffit même si le validateur l’ignore.

La déclaration doit participer à la décision.

Profils distincts

Les validateurs de profils différents peuvent devoir être séparés. Les audiences et règles peuvent être incompatibles. Un jeton d’accès et un message interne peuvent partager des noms de claims. Séparez leurs validateurs ou leurs configurations de façon à empêcher une substitution fondée sur cette ressemblance superficielle.

Erreur fréquente à comprendre

Tout token interne est interchangeable avec un access token.

Les audiences et règles peuvent être incompatibles.

Usage et clé

La politique doit lier usage et clé. La possession de paramètres ne rend pas chaque usage légitime. Une clé admise pour un échange interne ne devient pas automatiquement valable pour un login utilisateur. Définissez la matrice émetteur, destinataire, type de token et ensemble de clés autorisé.

Erreur fréquente à comprendre

Une clé connue peut être utilisée pour toute finalité.

La possession de paramètres ne rend pas chaque usage légitime.

Cas nominal

Un test nominal doit accompagner les refus. Il doit reconnaître les entrées conformes au contrat. Un validateur qui rejette tout fait réussir tous les tests négatifs. Gardez une fixture valide pour chaque profil autorisé afin de prouver que la politique reste utilisable.

Erreur fréquente à comprendre

Un validateur qui refuse tout satisfait tout besoin d’authentification.

Il doit reconnaître les entrées conformes au contrat.

Toutes les opérations

La bibliothèque doit vérifier les opérations requises. Lire la structure ne vérifie pas la preuve. Une composition peut exiger vérification de signature, déchiffrement et contrôle de claims. Vérifiez que l’API de bibliothèque choisie exécute effectivement l’ensemble attendu avant de produire un objet de confiance.

Erreur fréquente à comprendre

Un parsing réussi remplace les contrôles cryptographiques.

Lire la structure ne vérifie pas la preuve.

Mises à jour

Les mises à jour de bibliothèque demandent une revue ciblée. L’outil ne choisit pas automatiquement toutes les règles métier. Relisez changements de comportement, défauts d’options et avis de sécurité de la bibliothèque. Rejouez surtout les tests de confusion de profil et d’algorithme sur la version réellement déployée.

Erreur fréquente à comprendre

Une dépendance maintenue garantit toute configuration applicative.

L’outil ne choisit pas automatiquement toutes les règles métier.

Avant les effets

Les décisions doivent être appliquées avant les effets. L’ordre des contrôles détermine l’absence d’effet interdit. Ne confiez les données au handler métier qu’après validation. Les traces privées peuvent décrire le refus, mais aucune réservation, émission de message ou modification de droit ne doit précéder la décision.

Erreur fréquente à comprendre

Un refus après écriture prouve une validation sûre.

L’ordre des contrôles détermine l’absence d’effet interdit.

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

<?php
declare(strict_types=1);
$allowed = ['RS256'];
$received = 'none';
echo in_array($received, $allowed, true) ? 'allowed' : 'rejected';

Le tableau autorise uniquement RS256 et la valeur reçue est none ; in_array en mode strict retourne donc faux. Ce contrôle illustre une liste fermée, sans implémenter à lui seul un validateur JWT complet. Ajoutez ensuite la sélection de clé et les contrôles cryptographiques et de claims requis.

none n’appartient pas à la liste fermée. Le message ne peut élargir la politique. Le code ne génère pas de clé. Ce test de politique n’exécute pas la cryptographie.

Travail pratique : Dans un laboratoire, essayez un token sans signature, un algorithme hors liste et un type destiné à un autre flux.

Critères de correction : Les trois refusent avant l’autorisation métier. Conservez une fixture nominale pour éviter de créer un validateur qui rejette tout sans distinguer les cas.

Exemple commenté

Configuration attendue → algorithmes admis + clés liées + type de jeton
En-tête reçu → valeur à comparer à ce contrat

Le serveur détermine le contrat ; le message demande seulement à être évalué.

Exercice de mise en pratique

Dans un laboratoire, essayez un token sans signature, un algorithme hors liste et un type destiné à un autre flux.

Voir une proposition de correction

Les trois refusent avant l’autorisation métier. Conservez une fixture nominale pour éviter de créer un validateur qui rejette tout sans distinguer les cas.

Points de vérification

  • Liste fermée.
  • Clé liée à son usage.
  • Profils distincts.

Contrôle de connaissances

Cours associé : 05. Algorithmes imposés et profils disjoints ↗
Qui fixe les algorithmes autorisés par l’API ?

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 →