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: xforwardeddans la config Keycloak - Ajouter
KC_HOSTNAME_URL: https://sso.sanjy.frpour forcer l'URL frontend - S'assurer que Nginx envoie les headers
X-Forwarded-Proto: httpsetX-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.frdans 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 downpuisup
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:8080pourTOKEN_URLetAPI_URL(communication inter-conteneurs) - Garder
https://sso.sanjy.fruniquement pourAUTH_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-vsupprime 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