Skip to main content

Troubleshoot

🐛 ProblĂšmes rencontrĂ©s et solutions

1. Erreur "invalid_redirect_uri" avec port 30180

SymptÎme : Keycloak génÚre des URLs avec http://sso.sanjy.fr:30180 au lieu de https://sso.sanjy.fr

Cause : Keycloak ne prend pas en compte les headers du reverse proxy

Solution :

  • Ajouter KC_PROXY_HEADERS: xforwarded dans la config Keycloak
  • Ajouter KC_HOSTNAME_URL: https://sso.sanjy.fr pour forcer l'URL frontend
  • S'assurer que Nginx envoie les headers X-Forwarded-Proto: https et X-Forwarded-Port: 443

2. Redirect URI en localhost:3000

SymptĂŽme : L'URL de redirection OAuth contient http://localhost:3000 au lieu de https://grafana.sanjy.fr

Cause : Grafana ne connaĂźt pas son URL publique

Solutions :

  • Ajouter GF_SERVER_ROOT_URL=https://grafana.sanjy.fr dans la config Grafana
  • Ajouter GF_SERVER_DOMAIN=grafana.sanjy.fr
  • Retirer proxy_redirect off; dans la config Nginx (empĂȘche les réécritures)
  • RedĂ©marrer complĂštement Grafana avec podman-compose down puis up

3. Erreur "Page not found" sur le realm

SymptĂŽme : Erreur 404 lors de l'accĂšs aux endpoints Keycloak

Cause : Le nom du realm dans la config ne correspond pas au nom réel dans Keycloak

Solution :

  • VĂ©rifier le nom exact du realm dans l'interface Keycloak (en haut Ă  gauche)
  • S'assurer que ce nom est utilisĂ© partout dans les configs Grafana
  • Tester avec : curl https://sso.sanjy.fr/realms/VOTRE_REALM/.well-known/openid-configuration

4. Erreur "connection refused" sur TOKEN_URL

SymptÎme : Grafana ne peut pas échanger le code OAuth contre un token

Cause : Grafana essaie d'accéder à https://sso.sanjy.fr depuis le conteneur mais ne peut pas atteindre l'IP publique

Solution :

  • CrĂ©er un rĂ©seau Podman partagĂ© entre Keycloak et Grafana
  • Utiliser http://keycloak:8080 pour TOKEN_URL et API_URL (communication inter-conteneurs)
  • Garder https://sso.sanjy.fr uniquement pour AUTH_URL (utilisĂ© par le navigateur)

Vérification de la communication :

# Tester depuis le conteneur Grafana
podman exec grafana curl http://keycloak:8080/realms/sanjy.fr/.well-known/openid-configuration

5. Données Keycloak non persistées

SymptĂŽme : Le realm et les utilisateurs disparaissent aprĂšs podman-compose down/up

Cause : Volume non persistant ou supprimé avec podman-compose down -v

Solution :

  • Utiliser un volume nommĂ© dans podman-compose.yaml :
volumes:
  - data:/opt/keycloak/data

volumes:
  data:
  • Ne jamais utiliser podman-compose down -v (le -v supprime les volumes)
  • VĂ©rifier que le volume existe : podman volume ls

6. Permissions refusées sur bind mount

SymptĂŽme : Erreur Java "Error while creating file" dans les logs Keycloak

Cause : User namespace mapping de Podman en rootless (UID sur l'hîte ≠ UID dans le conteneur)

Solution abandonnée : Bind mount avec ./data:/opt/keycloak/data:Z

Solution retenue : Utiliser un volume nommé Podman qui gÚre automatiquement les permissions :

volumes:
  - data:/opt/keycloak/data

7. Préfixe réseau keycloak_sso au lieu de sso

SymptÎme : Le réseau créé s'appelle keycloak_sso au lieu de sso

Cause : podman-compose préfixe automatiquement avec le nom du répertoire du projet

Solution : Forcer le nom exact dans la définition du réseau :

networks:
  sso:
    name: sso
    driver: bridge

✅ VĂ©rifications finales

Vérifier Keycloak

# Endpoint OIDC du realm
curl https://sso.sanjy.fr/realms/sanjy.fr/.well-known/openid-configuration

# Doit retourner du JSON avec issuer, authorization_endpoint, etc.

Vérifier le réseau Podman

# Lister les réseaux
podman network ls | grep sso

# Inspecter le réseau
podman network inspect keycloak_sso

Vérifier la communication inter-conteneurs

# Depuis Grafana vers Keycloak
podman exec grafana curl http://keycloak:8080/realms/sanjy.fr/.well-known/openid-configuration

# Doit retourner du JSON (pas d'erreur de connexion)

Vérifier le volume Keycloak

# Lister les volumes
podman volume ls

# Inspecter le volume
podman volume inspect keycloak_data  # ou le nom de votre volume

Vérifier les logs

# Logs Keycloak
podman logs keycloak

# Logs Grafana (chercher "oauth", "keycloak")
podman logs grafana | grep -i oauth

📚 Points clĂ©s Ă  retenir

URLs publiques vs URLs internes

  • AUTH_URL : HTTPS public (https://sso.sanjy.fr) - utilisĂ© par le navigateur
  • TOKEN_URL et API_URL : HTTP interne (http://keycloak:8080) - communication serveur Ă  serveur

Réseau Podman

  • Les conteneurs sur le mĂȘme rĂ©seau peuvent communiquer via leurs noms
  • Utiliser keycloak:8080 depuis Grafana au lieu de localhost:30180

Volumes Podman

  • Les volumes nommĂ©s sont plus fiables que les bind mounts en rootless
  • Ne jamais utiliser podman-compose down -v pour Ă©viter de supprimer les donnĂ©es
  • Backup : podman volume export keycloak_data -o backup.tar

Headers Nginx essentiels

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;

Ces headers sont essentiels pour que Keycloak génÚre les bonnes URLs.

Ne JAMAIS utiliser proxy_redirect off;

Cette directive empĂȘche Nginx de réécrire les redirections, ce qui casse OAuth/OIDC.