NeahNew/DEBUG_502_CALLBACK.md
2026-01-04 11:06:15 +01:00

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

  • 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 :

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

  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