This repository has been archived on 2026-01-03. You can view files and clone it, but cannot push or open issues or pull requests.
Files
lions-user-manager/DEBUG_TOKEN_JWT.md

3.2 KiB

Debug du Token JWT

Problème

Le backend retourne 401 Unauthorized lors des appels REST, même avec un token JWT valide.

Vérifications à faire

1. Vérifier que le token contient les rôles

  1. Décoder le token JWT :

    • Allez sur https://jwt.io
    • Collez le token JWT (récupéré depuis les cookies du navigateur ou les logs)
    • Vérifiez la présence du claim roles avec les rôles assignés
  2. Vérifier le mapper Keycloak :

    • Connectez-vous à Keycloak : http://localhost:8180
    • Realm : lions-user-manager
    • Clients → lions-user-manager-client
    • Onglet "Mappers"
    • Vérifiez qu'il existe un mapper "realm roles" avec :
      • Claim name : roles
      • Token Claim Name : roles
      • Add to access token : ON
      • Add to ID token : ON

2. Vérifier la configuration Quarkus

Backend (application-dev.properties) :

quarkus.oidc.roles.role-claim-path=roles

Client (application.properties) :

quarkus.oidc.roles.role-claim-path=roles

3. Vérifier que le token est envoyé

Dans les logs du backend, vous devriez voir :

  • Verifying the JWT token with the local JWK keys
  • Si les rôles sont trouvés, vous ne devriez PAS voir No claim exists at the path 'roles'

4. Test manuel avec curl

# 1. Obtenir un token
TOKEN=$(curl -X POST "http://localhost:8180/realms/lions-user-manager/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=test-user" \
  -d "password=test123" \
  -d "grant_type=password" \
  -d "client_id=lions-user-manager-client" \
  -d "client_secret=NTuaQpk5E6qiMqAWTFrCOcIkOABzZzKO" | jq -r '.access_token')

# 2. Décoder le token pour vérifier les rôles
echo $TOKEN | cut -d. -f2 | base64 -d | jq .

# 3. Tester l'endpoint backend avec le token
curl -X POST "http://localhost:8081/api/users/search" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"page": 0, "pageSize": 20}'

5. Vérifier les logs Quarkus

Activez le logging DEBUG pour OIDC :

quarkus.log.category."io.quarkus.oidc".level=DEBUG

Vous devriez voir dans les logs :

  • Verifying the JWT token with the local JWK keys
  • No claim exists at the path 'roles'PROBLÈME : les rôles ne sont pas dans le token
  • Ou les rôles extraits correctement

6. Solution si les rôles ne sont pas dans le token

  1. Vérifier le mapper Keycloak :

    • Le mapper doit avoir claim.name=roles
    • Le mapper doit être activé pour access.token.claim=true
  2. Recréer le mapper :

    • Supprimez l'ancien mapper
    • Créez un nouveau mapper "realm roles" avec la configuration correcte
  3. Redémarrer le backend :

    • KeycloakTestUserConfig devrait créer le mapper automatiquement au démarrage

7. Solution si le token n'est pas envoyé

Vérifiez que le client REST propage bien le token :

quarkus.rest-client."lions-user-manager-api".bearer-token-propagation=true

8. Solution si le backend ne peut pas valider le token

Vérifiez que :

  • Le realm existe : lions-user-manager
  • L'URL du serveur est correcte : http://localhost:8180
  • Le discovery est activé : quarkus.oidc.discovery-enabled=true