Cette page consolide la surface publique de Cervantes : artefacts à déclarer, modules JPMS exportés, annotations sécurité reconnues, toutes les clés mp.jwt.* lues par JwtAuthConfigProducer, et tous les algorithmes JOSE supportés par le moteur de signature et de chiffrement.
Artefacts Maven
groupId |
artifactId |
Rôle |
|---|---|---|
|
|
Spec MP JWT 2.1 repackagée en module JPMS nommé ( |
|
|
SPI publique stable — |
|
|
Moteur de validation pur — parsing JWT, vérification signature (RS/ES/PS/HS), validation claims, chargement clés (PEM, JWKS), déchiffrement JWE. Aucun CDI, aucun JAX-RS. |
|
|
Producteur |
|
|
|
|
|
Benchmarks JMH (vs SmallRye JWT, profil opt-in |
|
|
Exemples ( |
|
|
Runner officiel TCK MP JWT 2.1 — hors reactor (Model 4.0.0). Ne pas déclarer en dépendance applicative. |
Toutes les versions à 0.1.0-SNAPSHOT au moment de la rédaction. Parent commun io.vidocq:vidocq-parent:1.0.0-SNAPSHOT.
Modules JPMS
| Module | Contenu |
|---|---|
|
Repackaging de la spec — annotations |
|
|
|
|
|
|
|
|
io.vidocq.cervantes.internal.* n’est jamais exporté. Toute classe applicative qui en dépend signale une régression à corriger.
Annotations sécurité reconnues
| Annotation | Effet | Statut |
|---|---|---|
|
L’appelant doit posséder au moins un des rôles listés (un rôle est une chaîne du claim |
✅ |
|
Endpoint ouvert à tous, anonyme inclus. Désactive les |
✅ |
|
Endpoint toujours rejeté en 403, quel que soit le token. |
✅ |
|
Qualifier d’injection CDI. La valeur typée est extraite du |
✅ |
|
Variante qui désigne le claim par son enum standard MP (au lieu d’une string libre). |
✅ |
|
Marqueur applicatif (compatibilité spec). Cervantes l’accepte sans action particulière — le filtre d’auth est de toute façon enregistré. |
✅ |
Types supportés pour @Claim
| Type Java | Sémantique |
|---|---|
|
Coercion : |
|
|
|
|
|
|
|
|
|
Pour les claims de type tableau ( |
|
Valeur brute parsée par Champollion. |
|
Sous-types JSON-P. |
|
Eager. Résolu une fois à l’injection. |
|
Lazy MP. |
|
Lazy CDI. |
|
Lazy JDK. |
|
Le token brut original — utile pour propager. |
Clés MicroProfile Config mp.jwt.*
Toutes les clés sont lues via ConfigProvider.getConfig() — fourni par Ravel dans l’écosystème Vidocq.
Vérification de signature
| Clé | Effet |
|---|---|
|
Clé publique inline. Accepte le PEM X.509 ( |
|
Emplacement de la clé publique : |
|
Famille d’algorithme attendue ( |
|
Émetteur attendu — string. Comparé strictement au claim |
|
Audiences acceptées — liste séparée par virgules. Au moins une intersection avec |
|
Tolérance d’horloge en secondes (défaut 60). Applique à |
|
Âge maximal du token, en secondes depuis |
|
Booléen — exiger la présence du claim |
Transport du token
| Clé | Effet |
|---|---|
|
|
|
Nom du cookie portant le token quand |
Déchiffrement JWE (optionnel)
| Clé | Effet |
|---|---|
|
Clé privée de déchiffrement inline. PEM PKCS#8. |
|
Emplacement de la clé privée de déchiffrement. |
|
Algorithme d’enveloppement attendu : |
Algorithmes de signature supportés
| Famille | Algorithmes | Implémentation JDK |
|---|---|---|
RSA |
|
|
RSA-PSS |
|
|
ECDSA |
|
|
HMAC |
|
|
Algorithmes JWE supportés
| Étape | Algorithme | Notes |
|---|---|---|
Enveloppement de clé ( |
|
|
Chiffrement de contenu ( |
|
|
(planifié) |
|
Non encore supporté — à ajouter si le TCK l’exige sur un futur jalon. |
Comportement HTTP
| Situation | Code |
|---|---|
Pas de token + endpoint |
Endpoint exécuté en anonyme. |
Pas de token + endpoint |
|
Token présent, signature invalide / |
|
Token valide mais sans rôle requis |
|
Token valide et rôle requis présent |
|
Endpoint |
|
Compatibilité
-
Java 25 (LTS), Maven 3.9.16.
-
JAX-RS 4.0 (Cassini ou autre runtime conforme).
-
CDI 4.1 Lite (Vauban) avec support des BCE.
-
MicroProfile Config 3.1+ (Ravel).
-
JSON-P 2.1 (Champollion).
-
Pas de dépendance Jakarta EE Full Profile.
Pour aller plus loin
-
Concepts — claims, signature, JWK Set, JWE.
-
Fonctionnement interne — pipeline et threading.
-
TCK — statut et exécution.