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 :**
```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** : 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` :
```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 :
```yaml
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 :
```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
```

---