Maison >développement back-end >tutoriel php >Authentification par jeton API
Dans cet article, j'expliquerai l'authentification par jeton API d'une manière facile à comprendre à l'aide de diagrammes.
Après avoir eu une compréhension approximative du fonctionnement de l'authentification par jeton API, j'expliquerai comment fonctionne l'authentification par jeton API à l'aide de Laravel Sanctum de manière basée sur le code.
En lisant cet article, vous apprendrez ce qui suit
Le client envoie les informations de connexion de l'utilisateur (par exemple, e-mail, mot de passe) au serveur d'authentification.
Le serveur d'authentification vérifie les informations de connexion pour vérifier si l'utilisateur existe et si le mot de passe est correct.
Une fois la connexion réussie, le serveur Auth génère un jeton API pour l'utilisateur. Le jeton API généré est stocké dans la table personal_access_tokens.
Le client envoie une requête API au serveur de ressources, en attachant le jeton API généré à l'en-tête d'autorisation.
Le serveur de ressources vérifie le jeton API. Si le jeton API est valide, la demande est traitée.
Le serveur de ressources renvoie une réponse API.
sail php artisan install:api
Cette commande génère le fichier api.php et les fichiers de migration nécessaires à l'authentification du jeton API dans le cadre du projet Laravel.
Ensuite, exécutez la migration :
sail artisan migrate
Cela crée la table personal_access_tokens.
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
api.php
Route::post('/register', [AuthController::class, 'register']);
AuthController.php
public function register(Request $request) { $fields = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed' ]); $user = User::create($fields); $token = $user->createToken($request->name); return [ 'user' => $user, 'token' => $token->plainTextToken ]; }
api.php
*Route*::post('/login', [*AuthController*::class, 'login']);
AuthController.php
sail php artisan install:api
*Remarque : un nouveau jeton API est généré à chaque fois qu'un utilisateur se connecte.
À l'aide de Postman, envoyez une requête API avec les conditions suivantes pour vérifier la réponse.
Une fois la connexion réussie, un jeton API est généré.
Vous pouvez consulter la table personal_access_tokens pour confirmer que le nom de l'utilisateur connecté et le jeton API sont enregistrés.
*Remarque : le jeton dans la réponse de l'API diffère du jeton dans la table personal_access_tokens car il est haché lorsqu'il est stocké dans la base de données.
Ce qui suit est un exemple de code du processus CRUD pour les publications associées à un utilisateur.
Exemple de code : PostController.php
À l'aide de Laravel Sanctum, limitez l'accès afin que seuls les utilisateurs connectés puissent créer, modifier et supprimer des publications associées à un utilisateur.
Envoyez une demande API réelle pour vérifier que l'authentification par jeton API est effectuée correctement.
Il est également possible de restreindre l'accès à tous les points de terminaison des publications définies dans apiResource en écrivant ce qui suit dans le fichier de routage.
api.php
sail php artisan install:api
sail artisan migrate
Dans ce cas, nous souhaitons définir l'authentification par jeton API uniquement pour les actions de stockage, de mise à jour et de suppression dans PostController. Pour ce faire, créez une méthode constructeur dans PostController et appliquez le middleware auth:sanctum à toutes les actions sauf index et show.
PostController.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
Désormais, les utilisateurs doivent inclure le jeton dans la demande lors de la création, de la mise à jour ou de la suppression d'une publication.
En testant cette configuration, si vous envoyez une demande sans le jeton d'autorisation pour créer une publication, une erreur 401 avec un message « Non authentifié » est renvoyée et la création de la publication échoue.
Si le jeton d'autorisation est inclus, les données sont créées avec succès.
De même, l'API de mise à jour et de suppression des publications nécessite que la demande soit envoyée avec le Token dans l'en-tête Autorisation.
Des restrictions d'accès des utilisateurs ont été mises en œuvre avec l'authentification par jeton API.
Cependant, il y a toujours un problème.
Dans son état actuel, les utilisateurs authentifiés peuvent mettre à jour ou supprimer les publications d'un autre utilisateur.
Ajoutez un processus pour vérifier que l'utilisateur est propriétaire de la publication.
Écrivez la logique d'autorisation dans le fichier de stratégie Laravel afin que seuls les utilisateurs propriétaires des publications puissent mettre à jour et supprimer les publications.
PostController.php
sail php artisan install:api
PostPolicy.php
sail artisan migrate
modifier la méthode :
api.php
2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
Appliquez le middleware auth::sanctum pour le routage de déconnexion et définissez l'authentification par jeton API.
AuthController.php
Route::post('/register', [AuthController::class, 'register']);
Le serveur supprimera le jeton API actuel de la base de données. Cela rend le jeton invalide et ne peut plus être utilisé.
Le serveur renvoie une réponse au client indiquant que la déconnexion a réussi.
Dans cet article, l'authentification par jeton API a été expliquée de manière facile à comprendre à l'aide de diagrammes.
En tirant parti de Laravel Sanctum, une authentification simple et sécurisée peut être réalisée à l'aide de jetons API, qui permettent aux clients d'accorder des droits d'accès à des utilisateurs individuels avec une flexibilité différente de l'authentification basée sur la session. Grâce à un middleware et à des politiques, les requêtes API peuvent également être protégées efficacement, l'accès restreint et la propriété des ressources vérifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!