Migration complète vers PrimeFaces Freya - Corrections des incompatibilités et intégration de primefaces-freya-extension
This commit is contained in:
104
DEBUG_TOKEN_JWT.md
Normal file
104
DEBUG_TOKEN_JWT.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# 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`
|
||||
|
||||
Reference in New Issue
Block a user