Rafraichir un access token
Quand l'access token expire, utilisez le refresh token pour en obtenir un nouveau :
# Rafraichir un token
curl -s -X POST "http://localhost:8080/realms/mon-application/protocol/openid-connect/token" \
-d "grant_type=refresh_token" \
-d "client_id=mon-frontend" \
-d "refresh_token=$REFRESH_TOKEN" | jq .
# La reponse contient un nouvel access_token ET un nouveau refresh_token
Revoquer un token
# Revoquer un refresh token (deconnexion cote serveur)
curl -s -X POST "http://localhost:8080/realms/mon-application/protocol/openid-connect/revoke" \
-d "client_id=mon-frontend" \
-d "token=$REFRESH_TOKEN" \
-d "token_type_hint=refresh_token"
# Deconnexion complete (logout)
curl -s -X POST "http://localhost:8080/realms/mon-application/protocol/openid-connect/logout" \
-d "client_id=mon-frontend" \
-d "refresh_token=$REFRESH_TOKEN"
Configurer les politiques de tokens
Dans Realm Settings > Tokens :
- Access Token Lifespan : Duree de vie de l'access token (defaut : 5 min)
- SSO Session Idle : Temps d'inactivite avant expiration de la session SSO (defaut : 30 min)
- SSO Session Max : Duree maximale de la session SSO (defaut : 10 heures)
- Refresh Token Max Reuse : Nombre de reutilisations du refresh token (0 = illimite)
- Revoke Refresh Token : Si active, chaque utilisation du refresh token l'invalide et en cree un nouveau
Bonne pratique : Gardez les access tokens courts (5 min) et les refresh tokens plus longs. Activez "Revoke Refresh Token" pour la rotation automatique.
CORS (Cross-Origin Resource Sharing)
Le CORS est necessaire quand votre frontend (SPA) et Keycloak sont sur des domaines differents.
Configuration dans Keycloak
- Web Origins (dans la configuration du client) : Origines autorisees pour les requetes CORS
+: Autorise toutes les redirect URIs comme origines*: Autorise toutes les origines (a eviter en production)
# Exemple : configurer Web Origins pour un client SPA
# Client mon-frontend > Web Origins :
# http://localhost:3000
# https://monapp.example.com
# Keycloak ajoutera automatiquement les headers CORS :
# Access-Control-Allow-Origin: http://localhost:3000
# Access-Control-Allow-Methods: GET, POST, OPTIONS
# Access-Control-Allow-Headers: Authorization, Content-Type
Securite des tokens : bonnes pratiques
- Ne stockez jamais les tokens dans le localStorage (vulnerable au XSS)
- Preferez le stockage en memoire ou en httpOnly cookie
- Utilisez HTTPS en production
- Verifiez toujours la signature et les claims cote backend
- Utilisez des durees de vie courtes pour les access tokens
- Activez la rotation des refresh tokens