# 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`) : ```properties quarkus.oidc.roles.role-claim-path=roles ``` **Client** (`application.properties`) : ```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 ```bash # 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 : ```properties 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 : ```properties 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`