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

Module 6 / 12 · 90 min

06. JWK, kid et choix des clés

Résoudre une référence de clé dans un périmètre maîtrisé.

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 JWK représente une clé avec des paramètres et métadonnées. Un jeu public de clés ne doit contenir que les éléments publics attendus. Le champ kid peut aider à sélectionner une clé ; il n’authentifie ni le token ni la destination réseau. Des clés de même identifiant dans des contextes différents ne doivent pas se confondre : issuer, usage et algorithme font partie de la résolution.

Raisonner et vérifier

Ne transformez jamais kid en chemin de fichier libre ni jku en URL de téléchargement arbitraire. Le jeu de clés est lié à un fournisseur admis. Borner réponse, délai, cache et renouvellement protège aussi contre l’abus de tokens à identifiants inconnus. Si la clé ne peut pas être résolue selon le contrat, refusez l’accès ; un ancien résultat positif ne doit pas faire accepter n’importe quelle signature.

Référence hostile

kid est une référence non fiable à résoudre. La référence ne prouve ni clé ni émetteur. kid vient du token reçu et doit être traité comme une donnée non fiable. Résolvez-le dans une table ou un jeu de clés maîtrisé plutôt que le convertir directement en chemin, requête ou URL.

Erreur fréquente à comprendre

kid authentifie son propre contenu.

La référence ne prouve ni clé ni émetteur.

Contexte de sélection

Une résolution peut dépendre de issuer et usage. Le contexte de confiance compte. Un même identifiant peut exister chez deux fournisseurs. La résolution doit tenir compte de l’émetteur admis et de l’usage attendu afin d’éviter qu’une clé valide dans un autre contexte soit choisie.

Erreur fréquente à comprendre

Le même kid doit toujours désigner la même autorité mondiale.

Le contexte de confiance compte.

Jeu public

Le jeu public ne doit pas exposer les paramètres privés. La vérification asymétrique utilise les données publiques. Une JWKS publique destinée à vérifier des signatures ne doit contenir que les paramètres publics prévus. Vérifiez les exports afin qu’une sérialisation d’objet de clé n’ajoute pas ses paramètres privés.

Erreur fréquente à comprendre

Une clé privée doit être publiée pour vérifier une signature.

La vérification asymétrique utilise les données publiques.

URL contrôlée

Une URL de clés doit être maîtrisée. Cela peut détourner la confiance et les sorties réseau. Une valeur jku arbitraire peut diriger le serveur vers une destination hostile ou interne. Partez d’une configuration de fournisseur maîtrisée et appliquez aussi la politique de sorties réseau.

Erreur fréquente à comprendre

Toute URL jku reçue doit être téléchargée.

Cela peut détourner la confiance et les sorties réseau.

Aucun chemin libre

kid ne doit pas devenir un chemin libre. Le client ne doit pas sélectionner arbitrairement des fichiers. Concaténer ../other-secret à un répertoire de clés permet une traversée de chemin. Une table de références exactes évite de donner au porteur une capacité générale de lecture du système de fichiers.

Erreur fréquente à comprendre

Concaténer kid au système de fichiers est une autorisation.

Le client ne doit pas sélectionner arbitrairement des fichiers.

Clé inconnue

Une clé inconnue doit suivre une actualisation bornée. Une entrée hostile peut sinon amplifier le travail. Une rotation peut justifier une actualisation JWKS, mais celle-ci doit être bornée et mutualisée. Des kid aléatoires en rafale ne doivent pas provoquer un appel externe coûteux pour chaque requête.

Erreur fréquente à comprendre

Tout kid inconnu justifie un nombre infini de téléchargements.

Une entrée hostile peut sinon amplifier le travail.

Ambiguïté

Un jeu ambigu demande une politique explicite. La résolution doit rester déterministe et sûre. Deux clés portant le même identifiant ou des usages incompatibles demandent un refus ou une politique explicite. Ne choisissez pas simplement le premier élément si cette règle n’établit pas une correspondance sûre.

Erreur fréquente à comprendre

Deux clés contradictoires doivent être acceptées au hasard.

La résolution doit rester déterministe et sûre.

Paramètres compatibles

Les paramètres de clé doivent être compatibles. Le type de clé fait partie de la validation. Contrôlez type de clé, usage et algorithme selon le profil. La présence d’un kid connu ne donne pas à une clé la capacité de vérifier n’importe quelle famille cryptographique.

Erreur fréquente à comprendre

kty peut être ignoré pour tous les algorithmes.

Le type de clé fait partie de la validation.

Sélection puis preuve

Sélectionner une clé ne vérifie pas encore la signature. La preuve doit être vérifiée avec la clé sélectionnée. Trouver la clé ne valide pas la signature. Gardez ces étapes distinctes et vérifiez qu’un token altéré avec un kid existant est encore refusé avant tout traitement métier.

Erreur fréquente à comprendre

Une correspondance kid valide automatiquement le payload.

La preuve doit être vérifiée avec la clé sélectionnée.

Cycle de cache

Le cache doit avoir un cycle documenté. Rotation et incident peuvent modifier les attentes. Documentez durée, rafraîchissement, panne et invalidation en incident. Un cache améliore la disponibilité mais peut retarder le retrait d’une clé compromise si aucune politique spécifique n’est prévue.

Erreur fréquente à comprendre

Une clé téléchargée reste fiable pour tout usage futur.

Rotation et incident peuvent modifier les attentes.

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

<?php
declare(strict_types=1);
$kid = '../other-secret'; // entrée simulée non fiable
$path = '/srv/lab/keys/'.$kid.'.pem';
echo $path;

La concaténation de kid dans un chemin transforme une référence hostile en accès au système de fichiers. Ne cherchez pas seulement à retirer les deux points : remplacez cette résolution libre par une sélection dans le jeu de clés admis pour le fournisseur et l’usage du token.

Une extension ne valide pas la provenance ni le droit de lecture. Un préfixe seul ne confine pas les chemins. Aucune vérification cryptographique n’a lieu. La référence doit être résolue dans un jeu de clés maîtrisé.

Travail pratique : Testez kid connu, inconnu, doublon ambigu et chaîne ressemblant à un chemin dans un validateur isolé.

Critères de correction : Refusez les cas non résolus sans lecture arbitraire. Vérifiez le nombre d’accès réseau et l’absence de paramètres privés dans le jeu public.

Exemple commenté

(issuer admis, usage, kid) → clé compatible dans un jeu maîtrisé
Aucune concaténation kid → chemin système

La résolution réduit les candidats ; la signature doit ensuite être vérifiée.

Exercice de mise en pratique

Testez kid connu, inconnu, doublon ambigu et chaîne ressemblant à un chemin dans un validateur isolé.

Voir une proposition de correction

Refusez les cas non résolus sans lecture arbitraire. Vérifiez le nombre d’accès réseau et l’absence de paramètres privés dans le jeu public.

Points de vérification

  • Référence non fiable.
  • Clé compatible.
  • Ressources bornées.

Contrôle de connaissances

Cours associé : 06. JWK, kid et choix des clés ↗
kid prouve-t-il qu’une clé est autorisée ?

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 →