Aller au contenu

ADR 0035 – jose pour les jetons de l'API

Statut : Décidée. Date : 30/09/2026. Applique la page « Protocole de synchronisation » (§12) et la page « Configuration Keycloak » (§8).

L’API doit vérifier les jetons Keycloak (signature, expiration, audience, clés publiques récupérées par JWKS et renouvelées) et émettre le jeton PowerSync de 5 minutes, signé par sa propre clé et validé par le service PowerSync par JWKS. Le prototype l’a fait avec node:crypto, sans gestion de la rotation des clés.

jose (licence MIT), sans dépendance : vérification par jwtVerify et createRemoteJWKSet, signature par SignJWT, publication de la clé publique par exportJWK. Algorithme RS256 imposé explicitement à la vérification. Le module auth de l’API est le seul à l’importer.

  • node:crypto écrit à la main : le prototype l’a fait ; la rotation de clés, le cache JWKS, le contrôle des algorithmes et des revendications seraient du code de sécurité à maintenir.
  • @nestjs/jwt et passport-jwt : enveloppent jsonwebtoken ; plus de dépendances et un modèle d’authentification qui ne sert pas ici.

Une dépendance d’exécution dans apps/api. Les tests injectent leur propre clé par un JWKS local : pas besoin de Keycloak pour tester l’API.

Le code touche jose en deux endroits (vérification, émission). Un remplacement ne change ni les routes ni les revendications.