3.2 KiB
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
-
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
rolesavec les rôles assignés
-
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
- Claim name :
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 keysNo 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
-
Vérifier le mapper Keycloak :
- Le mapper doit avoir
claim.name=roles - Le mapper doit être activé pour
access.token.claim=true
- Le mapper doit avoir
-
Recréer le mapper :
- Supprimez l'ancien mapper
- Créez un nouveau mapper "realm roles" avec la configuration correcte
-
Redémarrer le backend :
KeycloakTestUserConfigdevrait 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