Fix: Correction de la boucle de redirection OAuth infinie
- Stockage des tokens dans des cookies HttpOnly côté serveur - Suppression du stockage localStorage côté client - Modification du middleware pour vérifier les cookies HttpOnly - Redirection propre après authentification - Suppression du nettoyage précoce des paramètres URL Cela corrige le problème où le dashboard se rafraîchissait en boucle après l'authentification Keycloak. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -120,13 +120,44 @@ export async function POST(request: NextRequest) {
|
||||
hasIdToken: !!tokens.id_token
|
||||
});
|
||||
|
||||
// Supprimer le cookie du code verifier
|
||||
// Créer la réponse avec les tokens
|
||||
const response = NextResponse.json({
|
||||
...tokens,
|
||||
returnUrl: '/dashboard' // URL par défaut, sera remplacée côté client si returnUrl existe
|
||||
success: true,
|
||||
returnUrl: '/dashboard'
|
||||
});
|
||||
|
||||
// Stocker les tokens dans des cookies HttpOnly sécurisés
|
||||
const isProduction = process.env.NODE_ENV === 'production';
|
||||
|
||||
response.cookies.set('keycloak-token', tokens.access_token, {
|
||||
httpOnly: true,
|
||||
secure: isProduction,
|
||||
sameSite: 'lax',
|
||||
maxAge: tokens.expires_in || 3600, // 1 heure par défaut
|
||||
path: '/'
|
||||
});
|
||||
|
||||
response.cookies.set('keycloak-refresh-token', tokens.refresh_token, {
|
||||
httpOnly: true,
|
||||
secure: isProduction,
|
||||
sameSite: 'lax',
|
||||
maxAge: tokens.refresh_expires_in || 86400, // 24 heures par défaut
|
||||
path: '/'
|
||||
});
|
||||
|
||||
response.cookies.set('keycloak-id-token', tokens.id_token, {
|
||||
httpOnly: true,
|
||||
secure: isProduction,
|
||||
sameSite: 'lax',
|
||||
maxAge: tokens.expires_in || 3600,
|
||||
path: '/'
|
||||
});
|
||||
|
||||
// Supprimer le cookie du code verifier
|
||||
response.cookies.delete('pkce_code_verifier');
|
||||
|
||||
console.log('🍪 Tokens stockés dans des cookies HttpOnly sécurisés');
|
||||
|
||||
return response;
|
||||
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user