Aller au contenu

Authentification

ArtisanCMS s’appuie sur Laravel Breeze pour fournir un systeme d’authentification complet, securise et extensible. Tous les flux standards sont pris en charge nativement.

Le formulaire de connexion accepte l’email et le mot de passe. Apres verification, une session authentifiee est creee et l’utilisateur est redirige vers le tableau de bord d’administration.

// Routes d'authentification (routes/auth.php)
Route::post('/login', [AuthenticatedSessionController::class, 'store'])
->middleware('throttle:login');
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])
->middleware('auth');

L’inscription cree un nouveau compte utilisateur avec le role Subscriber par defaut. L’administrateur peut desactiver l’inscription publique dans les parametres du CMS.

Route::post('/register', [RegisteredUserController::class, 'store'])
->middleware('guest');

Le flux standard Laravel permet a l’utilisateur de demander un lien de reinitialisation par email, puis de definir un nouveau mot de passe via un token temporaire securise.

Route::post('/forgot-password', [PasswordResetLinkController::class, 'store']);
Route::post('/reset-password', [NewPasswordController::class, 'store']);

Apres l’inscription, un email de verification est envoye. L’utilisateur doit cliquer sur le lien pour confirmer son adresse. Les routes protegees peuvent exiger la verification via le middleware verified.

Les controleurs d’authentification se trouvent dans app/Http/Controllers/Auth/ :

ControleurResponsabilite
AuthenticatedSessionControllerConnexion et deconnexion
RegisteredUserControllerInscription d’un nouveau compte
PasswordResetLinkControllerEnvoi du lien de reinitialisation
NewPasswordControllerReinitialisation du mot de passe
EmailVerificationNotificationControllerRenvoi de l’email de verification
ConfirmablePasswordControllerConfirmation du mot de passe pour les actions sensibles
TwoFactorControllerActivation et verification du 2FA TOTP

ArtisanCMS propose une authentification a deux facteurs optionnelle basee sur le protocole TOTP (Time-based One-Time Password), compatible avec les applications comme Google Authenticator, Authy ou 1Password.

L’utilisateur active le 2FA depuis son profil. Le systeme genere un secret TOTP et affiche un QR code a scanner avec l’application d’authentification.

// Activation du 2FA
public function enable(Request $request): JsonResponse
{
$secret = TwoFactorService::generateSecret();
$request->user()->update([
'two_factor_secret' => encrypt($secret),
'two_factor_enabled' => true,
]);
return response()->json([
'qr_code' => TwoFactorService::generateQrCode($secret, $request->user()->email),
]);
}

Lorsque le 2FA est active, l’utilisateur doit saisir un code a 6 chiffres apres avoir entre son mot de passe. Le code est valide pendant 30 secondes avec une tolerance d’un intervalle.

Les sessions sont configurees dans config/session.php. En production, le pilote redis est recommande pour les performances et la fiabilite.

Fenêtre de terminal
SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_SECURE_COOKIE=true
SESSION_SAME_SITE=lax

La fonctionnalite “Se souvenir de moi” cree un cookie persistant securise qui maintient la session active au-dela de la duree standard. Le token est hache en base de donnees et renouvele a chaque utilisation.

Le middleware throttle limite les tentatives de connexion echouees :

// Limite : 5 tentatives par minute par combinaison email + IP
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by(
Str::lower($request->input('email')) . '|' . $request->ip()
);
});

Apres 5 tentatives echouees, le compte est temporairement verrouille. L’utilisateur recoit un message indiquant le delai d’attente avant la prochaine tentative.

Trop de tentatives de connexion. Veuillez reessayer dans 60 secondes.

Le compteur est reinitialise apres une connexion reussie ou apres expiration du delai.

ArtisanCMS utilise plusieurs middleware pour proteger les routes :

MiddlewareRole
authRequiert une session authentifiee
guestAccessible uniquement aux utilisateurs non connectes
verifiedRequiert la verification de l’email
EnsureAdminVerifie que l’utilisateur dispose d’un role d’administration
throttle:loginLimite les tentatives de connexion
// Exemple : protection d'un groupe de routes admin
Route::middleware(['auth', 'verified', EnsureAdmin::class])->group(function () {
Route::get('/admin', [DashboardController::class, 'index']);
// ...
});