Skip to main content

Troubleshoot


##

🐛 Problèmes rencontrés et solutions

###

1. Erreur "invalid_redirect_uri" avec port 30180

**Symptôme**Symptôme : Keycloak génère des URLs avec `http://sso.sanjy.fr:30180`30180 au lieu de `https://sso.sanjy.fr`fr

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

**Solution**Solution :
-

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

    443
  • ###

2. Redirect URI en `localhost:3000`

3000

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

**Cause**Cause : Grafana ne connaît pas son URL publique

**Solutions**Solutions :
-

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

    up
  • ###

3. Erreur "Page not found" sur le realm

**Symptôme**Symptôme : Erreur 404 lors de l'accès aux endpoints Keycloak

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

**Solution**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`

    configuration
  • ###

4. Erreur "connection refused" sur TOKEN_URL

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

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

**Solution**Solution :
-

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

**Vérification de la communication :**
```bash

# 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**Symptôme : Le realm et les utilisateurs disparaissent après `podman-compose down/up`up

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

**Solution**Solution :
-

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

volumes:
  data:
```
- **

  • Ne jamais utiliser**utiliser `podman-compose down -v`v (le `-v`v supprime les volumes)
    -
  • Vérifier que le volume existe : `podman volume ls`

    ls
  • ###

6. Permissions refusées sur bind mount

**Symptôme**Symptôme : Erreur Java "Error while creating file" dans les logs Keycloak

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

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

**Solution retenue**retenue : Utiliser un volume nommé Podman qui gère automatiquement les permissions :
```yaml

volumes:
  - data:/opt/keycloak/data
```

###

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

sso

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

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

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

networks:
  sso:
  name: sso
  driver: bridge
```

---

##


✅ Vérifications finales

###

Vérifier Keycloak

```bash

# 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

```bash

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

# Inspecter le réseau
podman network inspect keycloak_sso
```

###

Vérifier la communication inter-conteneurs

```bash

# 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

```bash

# Lister les volumes
podman volume ls

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

###

Vérifier les logs

```bash

# Logs Keycloak
podman logs keycloak

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

---