Authentification avec Fortify et Sanctum
Sanctum
Laravel Sanctum nous offre une façon d'authentifier une application auprès d'une API utilisant Laravel. Pour authentifier une application à page unique (Single Page Application), Sanctum utilise l'authentification basée sur le cookie de session Laravel.
L'installation de Sanctum se fait en exécutant
php artisan install:api
Configuration de base
- Dans le fichier
.envassurez-vous d'avoir les configurations suivantes (exemple avec les valeurs par défaut d'Angular)
- Dans le fichier
bootstrap/app.phpon devra ajouter
- Assurez vous de bien avoir configuré le fichier
configuration/cors.phppour permettre la transmission correcte des cookies.
php artisan config:publish cors
supports_credentialsdoit êtretrue-
allowed_originsdoit correspondre à la liste des adresses desquelles les requêtes HTTP proviendront. -
Pour protéger des routes derrière l'authentification de Sanctum, il suffit de leur appliquer l'intergiciel
auth.sanctum
Par exemple, dans le fichier routes/api.php, une route a été créée pour afficher les détails de l'utilisateur connecté. Cette dernière utilise l'intergiciel de Sanctum.
<?php
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
Protection CSRF
Toutes les requêtes protégées par Sanctum (incluant les routes d'authentification - voir Fortify) sont également protégées avec un jeton CSRF. Ce jeton sera envoyé dans un cookie et devra être envoyé avec toutes les requêtes HTTP dans une en-tête nommée X-XSRF-COOKIE.
- Récupérer le jeton en faisant une requête HTTP GET à
/sanctum/csrf-cookie - Ceci renvoie le cookie nommé
XSRF-TOKEN - Ajouter le contenu de ce cookie aux autres requêtes HTTP via l'en-tête
X-XSRF-COOKIE.
Notez bien
Si vous obtenez une erreur 419, c'est que Laravel attend un jeton CSRF (ex. routes web)
Fortify
Laravel Fortify est une implémentation de l'authentification de Laravel qui ne dépend pas du client utilisé. C'est à dire qu'on peut l'utiliser tant pour une application Laravel avec des pages Blade qu'avec un application de type page unique (Angular, React, etc.).
Fortify va créer pour nous les routes et contrôleurs requis pour tous les besoins d'authentification (inscription, réinitialisation de mot de passe, confirmation de courriel, authentification multifacteur).
Installation et configuration initiale
-
Installer Fortify via Composer
composer require laravel/fortify
-
Publier les ressources de Fortify
php artisan fortify:install
-
Des migrations seront crées durant l'installation
php artisan migrate
Un fichier config/fortify.php est créé durant l'installation. On s'attardera à trois (3) sections de ce fichier.
'home' =>Définir la route "home" de votre application client.'views' => falseDéfinir ce paramètre à false pour ne pas utiliser les vues fournies par Fortify.'features' => []Une liste des différentes fonctionnalités implémentées par Fortify. On peut les activer et désactiver à notre guise ou pour nous permettre de les implémenter une à la fois.
Authentification
La documentation officielle de Fortify vous donne tous les détails pour implémenter les différentes fonctionnalités d'authentification.
Voici un résumé rapide pour la création d'utilisateur.
- Lister les routes avec
php artisan route:list - On remarque qu'il y a la route
registerqui répond à une requête HTTP POST - Tiré de la documentation de Fortify, on verra que pour créer un utilisateur, on utilisera cette route. La route
registers'attend à recevoir en paramètre- name (string)
- email (string)
- password (string)
- password_confirmation (string)
- Si l'enregistrement réussit, on recevra une réponse avec le code
201 - Si l'enregistrement échoue, on recevra une réponse avec le code
422
C'est à nous de gérer la suite des choses lors de la réception de la réponse.
Rappel
Toutes les routes de l'authentification de Fortify sont protégées par l'intergiciel auth:sanctum. Il faut donc s'assurer de transmettre le jeton CSRf via l'en-tête X-XSRF-TOKEN.