225 lines
5.5 KiB
Markdown
225 lines
5.5 KiB
Markdown
# Debug Erreur 502 - Callback Keycloak
|
|
|
|
## 🔍 Situation Actuelle
|
|
|
|
**URL** : `https://hub.slm-lab.net/api/auth/callback/keycloak?...`
|
|
|
|
**Logs observés** :
|
|
- ✅ Profile callback : OK
|
|
- ✅ JWT callback : OK (rôles extraits depuis access token)
|
|
- ❌ Session callback : **PAS DE LOGS** (ne s'exécute pas ou échoue silencieusement)
|
|
- ❌ Erreur 502 Nginx
|
|
|
|
## 🎯 Hypothèses
|
|
|
|
### Hypothèse 1 : Session callback échoue silencieusement
|
|
Le session callback pourrait échouer avant d'atteindre les logs, causant une exception non gérée.
|
|
|
|
### Hypothèse 2 : Problème avec token.email ou token.name
|
|
Si `token.email` ou `token.name` sont `undefined` et que le code s'attend à des valeurs, cela pourrait causer une erreur.
|
|
|
|
### Hypothèse 3 : Timeout ou problème de mémoire
|
|
Le callback pourrait prendre trop de temps ou consommer trop de mémoire.
|
|
|
|
### Hypothèse 4 : Problème avec NEXTAUTH_URL ou NEXTAUTH_SECRET
|
|
Configuration manquante ou incorrecte.
|
|
|
|
## ✅ Corrections Appliquées
|
|
|
|
### 1. Logs détaillés dans session callback
|
|
- Logs au début et à la fin
|
|
- Logs de chaque étape
|
|
- Logs des valeurs de token
|
|
|
|
### 2. Try-catch complet
|
|
- Capture toutes les erreurs
|
|
- Logs détaillés de l'erreur
|
|
- Stack trace complète
|
|
|
|
### 3. Validation des champs requis
|
|
- Vérification de `token.sub` (user ID)
|
|
- Gestion des valeurs `undefined`
|
|
|
|
### 4. Events NextAuth
|
|
- `signIn` event pour tracker l'authentification
|
|
- `error` event pour capturer les erreurs NextAuth
|
|
- `signOut` event pour tracking
|
|
|
|
## 🔍 Prochaines Étapes d'Investigation
|
|
|
|
### Étape 1 : Vérifier les nouveaux logs
|
|
|
|
Après redémarrage du serveur, vous devriez voir :
|
|
|
|
```
|
|
=== SESSION CALLBACK START ===
|
|
Token error: undefined
|
|
Has accessToken: true
|
|
Has refreshToken: true
|
|
Token role: [...]
|
|
Token sub: ...
|
|
...
|
|
=== SESSION CALLBACK END ===
|
|
```
|
|
|
|
**Si vous ne voyez PAS ces logs** :
|
|
- Le session callback ne s'exécute pas du tout
|
|
- Il y a une erreur avant d'atteindre le callback
|
|
- Problème dans NextAuth lui-même
|
|
|
|
**Si vous voyez une erreur** :
|
|
- Les logs détaillés indiqueront exactement où ça échoue
|
|
|
|
### Étape 2 : Vérifier les events NextAuth
|
|
|
|
Vous devriez voir :
|
|
```
|
|
=== NEXTAUTH SIGNIN EVENT ===
|
|
User: ... ...
|
|
Account: keycloak
|
|
Profile: ...
|
|
```
|
|
|
|
**Si vous voyez `=== NEXTAUTH ERROR EVENT ===`** :
|
|
- L'erreur sera loggée avec détails
|
|
|
|
### Étape 3 : Vérifier les variables d'environnement
|
|
|
|
**Vérifier dans `.env` ou `.env.local`** :
|
|
```bash
|
|
NEXTAUTH_URL=https://hub.slm-lab.net
|
|
NEXTAUTH_SECRET=... (doit être défini)
|
|
KEYCLOAK_ISSUER=https://connect.slm-lab.net/realms/cercle
|
|
KEYCLOAK_CLIENT_ID=...
|
|
KEYCLOAK_CLIENT_SECRET=...
|
|
```
|
|
|
|
**Commandes pour vérifier** :
|
|
```bash
|
|
# Vérifier que les variables sont chargées
|
|
node -e "console.log(process.env.NEXTAUTH_URL)"
|
|
node -e "console.log(process.env.NEXTAUTH_SECRET ? 'SET' : 'MISSING')"
|
|
```
|
|
|
|
### Étape 4 : Vérifier les logs Nginx
|
|
|
|
**Si Nginx est devant Next.js**, vérifier les logs Nginx :
|
|
```bash
|
|
# Logs d'erreur Nginx
|
|
sudo tail -f /var/log/nginx/error.log
|
|
|
|
# Logs d'accès Nginx
|
|
sudo tail -f /var/log/nginx/access.log
|
|
```
|
|
|
|
**Chercher** :
|
|
- Timeout errors
|
|
- Connection refused
|
|
- Upstream errors
|
|
|
|
### Étape 5 : Vérifier les logs système
|
|
|
|
**Vérifier si Next.js crash** :
|
|
```bash
|
|
# Logs système
|
|
journalctl -u nextjs -f
|
|
|
|
# Ou si PM2
|
|
pm2 logs
|
|
|
|
# Ou si systemd
|
|
systemctl status nextjs
|
|
```
|
|
|
|
## 🛠️ Actions Immédiates
|
|
|
|
### 1. Redémarrer le serveur Next.js
|
|
```bash
|
|
# Arrêter
|
|
pm2 stop neah
|
|
# Ou
|
|
systemctl stop nextjs
|
|
|
|
# Redémarrer
|
|
pm2 start neah
|
|
# Ou
|
|
systemctl start nextjs
|
|
```
|
|
|
|
### 2. Tester à nouveau la connexion
|
|
|
|
1. Aller sur `/signin`
|
|
2. Se connecter avec Keycloak
|
|
3. Observer les logs dans le terminal
|
|
|
|
### 3. Partager les logs complets
|
|
|
|
**Ce qu'il faut partager** :
|
|
- Tous les logs depuis le début de la connexion
|
|
- Les logs jusqu'à l'erreur 502
|
|
- Les logs Nginx (si disponibles)
|
|
- Les logs système (si disponibles)
|
|
|
|
## 🔧 Solutions Possibles
|
|
|
|
### Solution 1 : Problème avec token.email ou token.name
|
|
|
|
**Si les logs montrent** :
|
|
```
|
|
Token email: undefined
|
|
Token name: undefined
|
|
```
|
|
|
|
**Correction** : Le JWT callback doit extraire email et name depuis le profil ou le token d'accès.
|
|
|
|
### Solution 2 : Problème avec NEXTAUTH_URL
|
|
|
|
**Si NEXTAUTH_URL est incorrect** :
|
|
- NextAuth ne peut pas construire les URLs de callback
|
|
- Correction : Vérifier que `NEXTAUTH_URL` correspond à l'URL publique
|
|
|
|
### Solution 3 : Problème avec NEXTAUTH_SECRET
|
|
|
|
**Si NEXTAUTH_SECRET est manquant** :
|
|
- NextAuth ne peut pas signer les JWT
|
|
- Correction : Générer un secret et l'ajouter
|
|
|
|
### Solution 4 : Timeout
|
|
|
|
**Si le callback prend trop de temps** :
|
|
- Augmenter les timeouts Nginx
|
|
- Optimiser le code du callback
|
|
|
|
## 📊 Checklist de Debugging
|
|
|
|
- [ ] Serveur Next.js redémarré
|
|
- [ ] Logs `=== SESSION CALLBACK START ===` visibles
|
|
- [ ] Logs `=== SESSION CALLBACK END ===` visibles
|
|
- [ ] Pas d'erreur dans les logs
|
|
- [ ] Variables d'environnement vérifiées
|
|
- [ ] Logs Nginx vérifiés (si applicable)
|
|
- [ ] Logs système vérifiés (si applicable)
|
|
|
|
## 🎯 Ce qu'on cherche
|
|
|
|
**Dans les prochains logs, on cherche** :
|
|
|
|
1. **Si on voit `=== SESSION CALLBACK START ===`** :
|
|
- ✅ Le callback s'exécute
|
|
- Chercher l'erreur dans les logs suivants
|
|
|
|
2. **Si on NE voit PAS `=== SESSION CALLBACK START ===`** :
|
|
- ❌ Le callback ne s'exécute pas
|
|
- Problème dans NextAuth avant le callback
|
|
- Vérifier les events NextAuth
|
|
|
|
3. **Si on voit `=== NEXTAUTH ERROR EVENT ===`** :
|
|
- ✅ NextAuth a capturé une erreur
|
|
- L'erreur sera loggée avec détails
|
|
|
|
---
|
|
|
|
**Document créé le** : $(date)
|
|
**Statut** : En attente des nouveaux logs après redémarrage
|
|
|