Tokens et securite 18 min de lecture

Politiques de tokens et CORS

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