Tokens
TOSIAM supporte deux modèles de tokens OAuth2 : stateful (stockés en CTS) et stateless (JWT autonomes). Le choix impacte la scalabilité, la révocation et la latence de validation.
Tokens stateful (CTS)
Par défaut, les access tokens sont des références opaques stockées dans le Core Token Store (CTS). La validation d’un token stateful nécessite une requête au CTS.
Avantages : révocation immédiate, pas de risque de fuite de données dans le token.
Inconvénients : chaque validation = requête LDAP, le CTS est un point central.
Tokens stateless (JWT)
Les tokens JWT sont auto-porteurs. La validation ne nécessite que la vérification de la signature JWKS — aucun appel au CTS.
Avantages : validation locale, adapté aux microservices distribués, meilleure scalabilité.
Inconvénients : révocation difficile (le token est valide jusqu’à expiration), taille plus grande.
Anatomie d’un access token JWT TOSIAM
{
"sub": "alice",
"iss": "https://tosiam.example.com/oauth2/realms/root",
"aud": ["https://api.example.com"],
"exp": 1735689600,
"iat": 1735686000,
"jti": "a1b2c3d4-e5f6-...",
"scope": "openid email profile api:read",
"client_id": "mon-client",
"realm": "/",
"cnf": {
"x5t#S256": "cert-thumbprint"
}
}
Clés de signature (JWKS)
GET /oauth2/{realm}/connect/jwk_uri
Les clés sont rotées automatiquement. Les clients doivent récupérer le JWKS dynamiquement (ou le mettre en cache avec rafraîchissement sur erreur de validation).
Tokens Macaroon
TOSIAM supporte les tokens Macaroon — tokens porteurs avec caveats ajoutables sans interaction serveur. Un Macaroon peut être restreint (caveat first-party) par n’importe qui possédant le token.
# Inspecter un Macaroon
POST /oauth2/{realm}/macaroon/inspect
token=MACAROON_TOKEN
# Restreindre un Macaroon (ajouter un caveat)
POST /oauth2/{realm}/macaroon/restrict
token=MACAROON_TOKEN&caveat=time < 2024-12-31
Tokens Refresh
Le refresh token est émis avec l’access token pour les grant types qui le supportent (authorization_code, password, CIBA). Sa durée de vie est configurable indépendamment.
| Propriété | Stateful | Stateless JWT |
|---|---|---|
| Stockage | CTS (LDAP) | Autonome |
| Révocation | Immédiate | À expiration |
| Validation | Appel CTS | Vérif. signature locale |
| Taille | Référence opaque (~40 chars) | JWT signé (~500–1000 chars) |
| Scalabilité | Limitée par le CTS | Horizontale |
Configuration des tokens stateless
Dans la configuration du service OAuth2 du realm :
Realm → Services → OAuth2 Provider
→ Use Stateless Access & Refresh Tokens : Enabled
→ Signing Algorithm : RS256 (ou ES256)
→ Token Signing Key Alias : (alias de la clé dans le keystore)