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/DIAGNOSTIC_401_UNAUTHORIZED.md

5.1 KiB

Diagnostic 401 Unauthorized - Backend

Problème

Erreur lors de l'appel au backend :

Received: 'Unauthorized, status code 401' when invoking REST Client method: 
'dev.lions.user.manager.client.service.RoleServiceClient#getAllRealmRoles'

Causes Possibles

1. Token JWT non envoyé au backend

Vérification :

  • Ouvrir les DevTools du navigateur (F12)
  • Aller dans l'onglet "Network"
  • Filtrer par "XHR" ou "Fetch"
  • Cliquer sur une requête vers /api/roles/realm
  • Vérifier l'en-tête Authorization: Bearer <token>

Solution :

  • Vérifier que bearer-token-propagation=true est configuré dans application.properties
  • Vérifier que le client est bien authentifié via OIDC

2. Backend ne peut pas valider le token

Vérification :

  • Vérifier les logs du backend pour voir les erreurs OIDC
  • Chercher les messages : Bearer access token is not available, Token validation failed, etc.

Solution :

  • Vérifier que quarkus.oidc.enabled=true dans application-dev.properties
  • Vérifier que quarkus.oidc.auth-server-url pointe vers le bon realm (lions-user-manager)
  • Vérifier que quarkus.oidc.token.issuer correspond au realm

3. Rôles non extraits du token

Vérification :

  • Vérifier les logs du backend pour voir : No claim exists at the path 'realm_access/roles'
  • Obtenir le token JWT et le décoder sur https://jwt.io
  • Vérifier que le claim realm_access.roles existe et contient les rôles

Solution :

  • Vérifier que quarkus.oidc.roles.role-claim-path=realm_access/roles est configuré
  • Vérifier que le client Keycloak a le scope "roles" activé
  • Vérifier que fullScopeAllowed=true est configuré pour le client

4. Token expiré

Vérification :

  • Vérifier les logs du backend pour voir : Token expired
  • Obtenir le token JWT et vérifier le claim exp

Solution :

  • Se reconnecter pour obtenir un nouveau token
  • Augmenter la durée de vie du token dans Keycloak si nécessaire

Étapes de Diagnostic

Étape 1 : Vérifier les logs du backend

Redémarrer le backend avec les logs DEBUG activés et chercher :

# Logs à surveiller
- "Bearer access token is not available"
- "No claim exists at the path"
- "Token validation failed"
- "Roles extracted from claim"

Étape 2 : Vérifier le token JWT

  1. Obtenir le token JWT (via DevTools ou script)
  2. Décoder sur https://jwt.io
  3. Vérifier :
    • iss : doit être http://localhost:8180/realms/lions-user-manager
    • realm_access.roles : doit contenir les rôles (admin, user_manager, etc.)
    • exp : doit être dans le futur

Étape 3 : Vérifier la configuration OIDC

Backend (application-dev.properties) :

quarkus.oidc.enabled=true
quarkus.oidc.auth-server-url=http://localhost:8180/realms/lions-user-manager
quarkus.oidc.application-type=service
quarkus.oidc.token.issuer=http://localhost:8180/realms/lions-user-manager
quarkus.oidc.roles.role-claim-path=realm_access/roles
quarkus.oidc.verify-access-token=true

Client (application.properties) :

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

Étape 4 : Tester manuellement 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" \
  -d "scope=openid profile email roles" | jq -r '.access_token')

# 2. Tester l'endpoint backend
curl -X GET "http://localhost:8081/api/roles/realm?realm=master" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json"

Configuration Actuelle

Backend OIDC

  • Realm : lions-user-manager
  • Type : service (valide les tokens sans client-id/secret)
  • Role Claim Path : realm_access/roles
  • Token Audience : optional (accepte tous les clients)

Client OIDC

  • Realm : lions-user-manager
  • Client ID : lions-user-manager-client
  • Bearer Token Propagation : true

Solution Recommandée

  1. Vérifier que le backend est démarré sur le port 8081
  2. Vérifier que Keycloak est démarré sur le port 8180
  3. Vérifier que l'utilisateur test-user est connecté au client
  4. Vérifier les logs du backend pour voir exactement où l'erreur se produit
  5. Tester manuellement avec curl pour isoler le problème

Logs à Surveiller

Backend (port 8081)

# Chercher ces messages dans les logs
DEBUG [io.qu.oi.ru.BearerAuthenticationMechanism] Starting a bearer access token authentication
DEBUG [io.qu.oi.ru.OidcUtils] Looking for a token in the authorization header
DEBUG [io.qu.oi.ru.OidcUtils] Roles extracted from claim 'realm_access/roles': [...]

Client (port 8080)

# Chercher ces messages dans les logs
DEBUG [io.qu.oi.ru.OidcAuthenticationMechanism] q_session_chunk_1 cookie set
DEBUG [io.qu.oi.ru.OidcUtils] No claim exists at the path 'realm_access/roles'