|
Cervantes est en |
Côté code applicatif, la migration est triviale : Cervantes consomme strictement les annotations standard org.eclipse.microprofile.jwt. et jakarta.annotation.security.. Aucun import propriétaire à remplacer. Les écarts portent sur la configuration de transport/JWE et sur l’empreinte de dépendances.
Depuis SmallRye JWT
SmallRye JWT est l’implémentation de référence chez Quarkus et chez certains serveurs Jakarta EE. Migration directe — Cervantes vise la stricte conformance à la même spec.
| SmallRye JWT | Cervantes | Note |
|---|---|---|
|
Mêmes annotations |
Aucun changement de code applicatif. |
|
Idem |
Même interface MP standard. |
|
Idem, mêmes types supportés |
Cervantes ajoute le support de |
Clés |
Mêmes clés |
|
Clés |
Mêmes clés |
|
Clés |
Mêmes clés |
|
Dépendances transitives : jose4j, Jackson, … |
Aucune ( |
Empreinte de classpath réduite. Compatibilité jlink immédiate. Compatible GraalVM native-image. |
|
Pas d’équivalent (claims standards uniquement) |
Si l’émetteur ne pose pas |
|
|
Renommer. |
|
|
Renommer (préfixe |
Quarkus Dev Mode hot reload |
Pas d’équivalent |
Le cycle est |
Différences notables
-
A128CBC-HS256non supporté — Cervantes implémente uniquementA256GCMcomme algorithme de chiffrement de contenu JWE (défaut spec, couvert par le TCK). À ajouter si un émetteur l’exige. -
Pas de réflexion à chaud — l’injection
@Claimest résolue par une BCE Vauban à la compilation CDI, pas par un proxy dynamique. Si une convention de typage SmallRye exotique était utilisée (par exemple@Claim List<Integer>sur un champ numérique stocké en string), vérifier que le type concret est dans la liste supportée (voir Référence). -
Pas de
setAccessible(true)— toute classe métier qui doit recevoir une injection@Claimdoit être visible CDI normalement (@Dependent,@RequestScoped, …). Si SmallRye ouvrait des packages opens-runtime, Cervantes ne le fait pas — ouvrir explicitement dansmodule-info.java. -
mp.jwt.verify.publickey.location— auto-détection PEM vs JWKS basée sur le format du contenu, pas sur l’extension du fichier. Une URL renvoyant un JWK Set valide est traitée comme JWKS, qu’elle se termine par.json,.jwksou rien. -
JWKS — refresh paresseux — Cervantes ne fetch pas le JWK Set au démarrage. Le premier
kidinconnu déclenche le fetch. Avantage : démarrage rapide et pas de fail-fast si l’émetteur est temporairement down. Inconvénient : la première requête peut être un peu plus lente.
Empreinte de classpath comparée
| Choix | Lib runtime apportées |
|---|---|
SmallRye JWT |
|
Cervantes |
|
Checklist de portage
-
Remplacer la dépendance SmallRye JWT par
cervantes-cdi-vauban+cervantes-jaxrs(ou simplement le wrappervidocq-runtime-cervantes-jwt-extensionsi vous packagez via Vidocq Runtime). -
Auditer les annotations applicatives : doivent toutes être issues de
org.eclipse.microprofile.jwt.etjakarta.annotation.security.. Remplacer toute annotationio.smallrye.jwt.*. -
Migrer les propriétés
smallrye.jwt.vers leurs équivalentsmp.jwt.standard. -
Vérifier que les claims attendus existent bien sur les tokens :
iss,aud,exp,groups. Pas de remapping path-based exotique. -
Lancer les tests unitaires :
./mvnw test. -
Lancer le TCK pour valider la conformité :
./run-official-tck-mp-jwt-2.1.sh(voir TCK). -
Vérifier en environnement de staging : un token valide passe en 200, un token expiré en 401, un manque de rôle en 403.
-
Mesurer la latence de validation et comparer (voir Référence vers
BENCH.md). Cervantes est ~1.5× plus lent que SmallRye sur le hot-path RS256 — compromis assumé contre la disparition de ~3 Mo de dépendances transitives.