5.5 KiB
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
signInevent pour tracker l'authentificationerrorevent pour capturer les erreurs NextAuthsignOutevent 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 :
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 :
# 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 :
# 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 :
# 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
# Arrêter
pm2 stop neah
# Ou
systemctl stop nextjs
# Redémarrer
pm2 start neah
# Ou
systemctl start nextjs
2. Tester à nouveau la connexion
- Aller sur
/signin - Se connecter avec Keycloak
- 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_URLcorrespond à 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 :
-
Si on voit
=== SESSION CALLBACK START ===:- ✅ Le callback s'exécute
- Chercher l'erreur dans les logs suivants
-
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
-
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