Maison > développement back-end > tutoriel php > Authentification par jeton API

Authentification par jeton API

Susan Sarandon
Libérer: 2024-11-09 20:44:02
original
260 Les gens l'ont consulté

Introduction

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

  • Comment fonctionne l'authentification par jeton API
  • Comment installer Laravel Sanctum
  • Génération d'un jeton API lors de l'enregistrement et de la connexion de l'utilisateur
  • Authentification par jeton API pour restreindre l'accès et vérifier la propriété des ressources
  • Suppression du jeton API à la déconnexion

Comment fonctionne l'authentification par jeton API

API Token Authentication

1. Demande d'inscription/de connexion d'un utilisateur

Le client envoie les informations de connexion de l'utilisateur (par exemple, e-mail, mot de passe) au serveur d'authentification.

2. Authentification de l'utilisateur

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.

3.  Génération de jetons API

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.

4. Demande d'API

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.

5.  Vérification du jeton API

Le serveur de ressources vérifie le jeton API. Si le jeton API est valide, la demande est traitée.

6. Réponse API

Le serveur de ressources renvoie une réponse API.

Comment installer Laravel Sanctum

sail php artisan install:api
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cela crée la table personal_access_tokens.

2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
Copier après la connexion
Copier après la connexion
Copier après la connexion

Génération d'un jeton API lors de l'enregistrement et de la connexion de l'utilisateur

API Token Authentication

Exemple de code

api.php

Route::post('/register', [AuthController::class, 'register']);
Copier après la connexion
Copier après la connexion

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
    ];
}
Copier après la connexion

Inscription des utilisateurs

  1. Inscription des utilisateurs.
  2. Le nouvel utilisateur est enregistré dans le tableau des utilisateurs.
  3. Un jeton API est généré. (créerToken)
  4. Le jeton API généré et les informations utilisateur sont stockés dans la table personal_access_tokens, et le jeton API est fourni à l'utilisateur.

Exemple de code

api.php

*Route*::post('/login', [*AuthController*::class, 'login']);
Copier après la connexion

AuthController.php

sail php artisan install:api
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Connexion utilisateur

  1. Connexion utilisateur.
  2. Vérifie si l'utilisateur existe dans la table des utilisateurs.
  3. Le jeton API est généré après une connexion réussie. (créerToken)
  4. Le jeton API généré et les informations utilisateur sont stockés dans la table personal_access_tokens, et le jeton API est fourni à l'utilisateur.

*Remarque : un nouveau jeton API est généré à chaque fois qu'un utilisateur se connecte.

Génération de jetons API

À l'aide de Postman, envoyez une requête API avec les conditions suivantes pour vérifier la réponse.

API Token Authentication

Une fois la connexion réussie, un jeton API est généré.

API Token Authentication

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.

Authentification par jeton API

API Token Authentication

  1. L'utilisateur envoie une requête API et inclut le jeton API dans l'en-tête d'autorisation.
  2. auth:sanctum middleware fait correspondre le jeton API reçu de la requête API au jeton API stocké dans la table personal_access_tokens.
  3. Si le jeton API est authentifié avec succès, le serveur de ressources traite la demande API.
  4. L'utilisateur authentifié peut mettre à jour ou supprimer des publications.
  5. Le serveur de ressources renvoie une réponse API.

Restreindre l'accès aux fonctions de publication

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.

Normes de contrôle d'accès

API utilisateur

  • index, afficher Ces actions fournissent des informations généralement publiques et ne nécessitent pas d'authentification par jeton API pour une meilleure expérience utilisateur et un meilleur référencement.
  • stocker, mettre à jour, supprimer Pour empêcher tout accès non autorisé et maintenir l'intégrité des données, une authentification par jeton API est requise.

API d'administration

  • indexer, afficher, stocker, mettre à jour, supprimer Pour une sécurité renforcée, les API qui n'ont pas besoin d'être publiques doivent être sécurisées en exigeant l'authentification de l'utilisateur pour toutes les actions du contrôleur.

Codage

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
sail artisan migrate
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

API Token Authentication

Si le jeton d'autorisation est inclus, les données sont créées avec succès.

API Token Authentication

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.

Vérification de la propriété après la publication

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.

API Token Authentication

  1. L'utilisateur envoie une requête API et inclut le jeton API dans l'en-tête d'autorisation.
  2. auth:sanctum middleware fait correspondre le jeton API reçu de la requête API au jeton API stocké dans la table personal_access_tokens.
  3. auth:sanctum middleware obtient l'utilisateur associé au jeton API et vérifie si cet utilisateur est propriétaire de la publication cible.
  4. Si le jeton API est authentifié avec succès et que l'utilisateur est propriétaire de la publication cible, le serveur de ressources traitera la demande API.
  5. L'utilisateur authentifié et propriétaire des publications peut mettre à jour et supprimer les publications.
  6. Le serveur de ressources renvoie une réponse API.

Codage

É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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • Réception d'une demande
    • L'utilisateur envoie une demande d'API et inclut le jeton API dans l'en-tête d'autorisation.
  • Vérification du jeton
    • Le serveur de ressources obtient le jeton API de l'en-tête Authorization de la demande API. Et vérifie ensuite que le jeton API reçu de la demande correspond au jeton API stocké dans la table personal_access_tokens.
  • Identification de l'utilisateur
    • Si le token est valide, l'utilisateur associé au token est identifié. Nous pouvons obtenir l'utilisateur identifié avec la méthode $request->user().
  • Appeler une stratégie La méthode Gate::authorize transmet l'utilisateur authentifié et les objets ressources comme arguments aux méthodes de la stratégie.

PostPolicy.php

sail artisan migrate
Copier après la connexion
Copier après la connexion
Copier après la connexion

modifier la méthode :

  • Arguments :
    • $user : Instance de l'utilisateur actuellement authentifié.
    • $post : Une instance du modèle Post.
  • Logique :
    • Vérifiez si l'utilisateur actuellement authentifié est propriétaire de la publication spécifiée.

Mise à jour du message d'autres utilisateurs

API Token Authentication

  1. Définissez l'identifiant de la publication comme paramètre de chemin pour publier le point de terminaison de l'API de mise à jour.
  2. Incluez le jeton d'un utilisateur qui n'est pas propriétaire de cette publication dans l'en-tête Autorisation.
  3. Renvoie un message d'erreur 403 indiquant que vous n'êtes pas le propriétaire de la publication.

Suppression du jeton API à la déconnexion

API Token Authentication

Flux de déconnexion

  1. L'utilisateur envoie une requête API et inclut le jeton API dans l'en-tête d'autorisation
  2. auth:sanctum middleware fait correspondre le jeton API reçu de la requête API au jeton API stocké dans la table personal_access_tokens.
  3. Si le jeton API est authentifié avec succès, le serveur de ressources traite la demande API.
  4. Supprimez le jeton API de l'utilisateur authentifié de la table personal_access_tokens.
  5. Le serveur de ressources renvoie une réponse API.

Codage

api.php

2024_10_23_231407_create_personal_access_tokens_table ......... 3.84ms DONE
Copier après la connexion
Copier après la connexion
Copier après la connexion

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']);
Copier après la connexion
Copier après la connexion

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.

Résumé

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal