title: "Authentification dans Next.js App Router en 2026 : Clerk, Auth.js v5 ou Better Auth" description: "Clerk, Auth.js v5 ou Better Auth : comment choisir la bonne solution d'authentification pour un projet Next.js App Router en 2026, après la dépréciation de Lucia." date: "2026-06-05" category: "Ingénierie" readingTime: "8 min" author: "Oliwer Fortin, Tech Lead chez Kreio"
Choisir une solution d'authentification Next.js est l'une des premières décisions d'un projet, et en 2026 le paysage a considérablement évolué : Lucia Auth est déprécié depuis mars 2025, Auth.js v5 est stable mais son équipe oriente les nouveaux projets vers Better Auth, et Clerk reste la référence pour les applications B2C. Voici un état des lieux concret pour choisir sans se tromper.
Ce qui a changé depuis 2025
Trois évolutions majeures redessinent le tableau cette année.
Première : Lucia Auth est officiellement déprécié. En mars 2025, son mainteneur a annoncé la fin du projet en tant que bibliothèque de production. Lucia se transforme en ressource documentaire sur la gestion de sessions. Tout projet démarrant aujourd'hui doit l'exclure de sa liste.
Deuxième : l'équipe d'Auth.js a transféré la maintenance active à l'équipe de Better Auth en septembre 2025. Auth.js reçoit encore des correctifs de sécurité, mais pour les nouveaux projets sa documentation redirige désormais explicitement vers Better Auth.
Troisième : la CVE-2025-29927, divulguée en mars 2025, a rappelé qu'une protection basée uniquement sur le middleware Next.js est contournable par injection de l'en-tête x-middleware-subrequest. La défense en profondeur, avec des vérifications côté Server Components & Route Handlers, est désormais non négociable.
Auth.js v5 : stable, mais réservé aux migrations
Auth.js v5 (anciennement NextAuth) est arrivé en version stable fin 2024. La réécriture complète lui apporte une compatibilité native avec l'App Router via une fonction auth() universelle, utilisable dans les Server Components, les Route Handlers et le middleware.
// src/auth.ts
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth, signIn, signOut } = NextAuth({
providers: [GitHub],
})
// Dans un Server Component
const session = await auth()
if (!session) redirect("/login")
Par défaut, Auth.js v5 utilise des JWT si aucun adaptateur de base de données n'est configuré. Avec un adaptateur (Prisma, Drizzle, etc.), il bascule sur des sessions en base, plus révocables mais avec un aller-retour réseau supplémentaire.
La documentation officielle d'Auth.js détaille le chemin de migration depuis la v4 pour les équipes qui souhaitent moderniser une application existante.
Better Auth : le successeur naturel pour le self-hosting
Better Auth est une bibliothèque open-source orientée code-first. Elle reprend les concepts d'Auth.js en les rendant plus composables et mieux typés.
Ce qui la distingue concrètement :
- Révocation de session immédiate sans liste de blocage JWT
- Plugins natifs : 2FA, organisations multi-tenant, magic links
- Typage TypeScript complet sur les entités de session
- Zéro coût, zéro dépendance à un service externe
// src/lib/auth.ts
import { betterAuth } from "better-auth"
import { prismaAdapter } from "better-auth/adapters/prisma"
import { twoFactor } from "better-auth/plugins"
import { prisma } from "@/lib/prisma"
export const auth = betterAuth({
database: prismaAdapter(prisma, { provider: "postgresql" }),
socialProviders: {
github: {
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!,
},
},
plugins: [twoFactor()],
})
La formule de charge sessions est simple : pour utilisateurs actifs simultanés avec un temps moyen de session en heures, le nombre de sessions actives à gérer vaut :
Avec Better Auth et un adaptateur Prisma, chaque session est une ligne en base. La complexité opérationnelle reste linéaire et prévisible, sans rotation de clés JWT ni liste de blocage à maintenir.
Clerk : la solution SaaS qui accélère la mise en marché
Clerk est une plateforme d'authentification hébergée. On intègre ses composants React, on configure les providers OAuth dans le dashboard, et l'authentification fonctionne en quelques heures plutôt qu'en plusieurs jours.
Son modèle économique en 2026 :
| Palier | MAU inclus | Prix |
|---|---|---|
| Gratuit | 50 000 | 0 $ / mois |
| Pro | Au-delà de 50 000 | 25 $ / mois + 0,02 $ par MAU supplémentaire |
| Enterprise | Sur devis | Sur devis |
Un MAU (Monthly Active User) chez Clerk correspond à un utilisateur qui visite l'application au moins un jour après son inscription dans le mois courant. Le palier gratuit est passé de 10 000 à 50 000 MAU en 2026, ce qui couvre la grande majorité des projets en phase de lancement.
Les composants pré-construits gèrent les cas d'usage courants sans configuration UI :
// app/(auth)/sign-in/[[...sign-in]]/page.tsx
import { SignIn } from "@clerk/nextjs"
export default function SignInPage() {
return (
<main className="flex min-h-screen items-center justify-center">
<SignIn />
</main>
)
}
Le middleware Clerk est compatible Edge Runtime et protège les routes sans appel base de données :
// middleware.ts
import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server"
const isProtected = createRouteMatcher(["/dashboard(.*)"])
export default clerkMiddleware((auth, req) => {
if (isProtected(req)) auth().protect()
})
Clerk excelle sur les applications multi-tenant grâce à son module OrganizationSwitcher et à ses hooks useOrganization. Pour un SaaS B2B avec des espaces de travail par équipe, la configuration tient en dizaines de lignes.
Tableau comparatif des trois solutions
| Critère | Clerk | Auth.js v5 | Better Auth |
|---|---|---|---|
| Type | SaaS managé | Open-source | Open-source |
| Hébergement données | Serveurs Clerk | Auto-hébergé | Auto-hébergé |
| Intégration App Router | Native | Native (v5) | Native |
| Révocation de session | Immédiate | JWT : non / DB : oui | Immédiate |
| UI pré-construite | Oui (<SignIn />) | Non | Non |
| Multi-tenant natif | Oui | Non | Via plugin |
| 2FA | Oui | Via plugin | Via plugin |
| Coût | 0 $ jusqu'à 50K MAU | Gratuit | Gratuit |
| Recommandé pour | B2C, SaaS, MVPs | Migration seulement | Self-hosting, projets RGPD |
Ce qu'on en retient
En 2026, la décision se résume à deux questions : les données utilisateurs peuvent-elles être hébergées chez un tiers, et a-t-on besoin d'un multi-tenant clé en main ?
Pour un MVP ou une application B2C sous 50 000 utilisateurs actifs, Clerk réduit le temps de mise en marché sans coût initial. Les composants gèrent l'UI, le middleware gère les routes, et l'équipe peut se concentrer sur le produit.
Pour un projet self-hosted soumis à des contraintes de données, Better Auth est le choix solide. Il reprend les patterns d'Auth.js avec une meilleure ergonomie, un typage TypeScript complet, et aucune dépendance externe.
Auth.js v5 reste utile pour les migrations. Pour les nouveaux projets, son propre écosystème oriente vers Better Auth.
Quelle que soit la solution retenue, la CVE-2025-29927 rappelle une règle fondamentale : le middleware ne suffit pas. La vérification d'authentification doit être répétée dans chaque Server Component et Route Handler exposé, conformément aux recommandations de la documentation Next.js sur la sécurité.