learn.chetana.fr

JWT, JWKS et la résolution du tenant

15 min de lectureAvancé

Valider un JWT, la version sérieuse

Le middleware d'auth valide chaque Bearer token émis par Logto. Les détails qui séparent une validation correcte d'une faille :

  1. Whitelist d'algos asymĂ©triques uniquement (RS/ES/PS 256-512, Logto signe en ES384). Le HS* est explicitement exclu — c'est la parade Ă  l'attaque alg confusion : un attaquant forge un token alg: HS256 signĂ© avec
 la clĂ© publique comme secret HMAC. Si le code accepte les deux familles, la clĂ© publique (publique !) devient une clĂ© de signature valide ;
  2. l'algo lu dans le header doit appartenir Ă  la whitelist, et SEUL cet algo est passĂ© au dĂ©codeur — jamais une liste large ;
  3. signature + iss + aud + exp vĂ©rifiĂ©s — avec la subtilitĂ© multi-audiences (Logto stampe l'aud diffĂ©remment selon le type de token → on boucle sur les audiences acceptĂ©es).

Le cache JWKS : chaud, mais prĂȘt pour la rotation

Les clĂ©s publiques de Logto viennent du endpoint JWKS. Les rĂ©cupĂ©rer Ă  chaque requĂȘte serait un aller-rĂ©seau sur le hot path ; les cacher trop fort casserait la rotation de clĂ©s. Le pattern :

cache in-memory, TTL 1 h
kid connu   → validation sans aucune I/O
kid INCONNU → UN refresh forcĂ© du JWKS, puis re-recherche
              (une clĂ© vient de tourner — ou le token est forgĂ©, et Ă©chouera)

Ce « refresh-on-miss » est réutilisable pour tout secret distant qui tourne : chaud par défaut, correct pendant les rotations, et un token forgé ne coûte qu'un fetch.

Du token au tenant : la chaĂźne complĂšte

Bearer ES384 → validation → organizations du token
  → header X-Org-Id ∈ organizations ?  (l'utilisateur EST membre de l'org qu'il prĂ©tend)
  → SQL : tenant_identity_for_logto_org(org) → tenant_id local
  → request.state.{user_id, tenant_id, principal} + contexte de logs bindĂ©

C'est CE tenant_id qui alimente la session RLS du module 3 — l'isolation part du token. Le provisioning ferme la boucle : Ă  l'inscription, un endpoint dĂ©diĂ© (JWT requis mais sans check tenant — c'est lui qui le crĂ©e) synchronise l'organisation Logto vers un tenant local ; un script CLI idempotent pilote l'API Management de Logto pour crĂ©er apps et resources.

đŸ§© Quiz1/4

Pourquoi exclure HS256 de la whitelist alors qu'il est cryptographiquement sûr ?

🃏 Flashcards1/4