Maison > cadre php > Laravel > Développement Laravel : Comment implémenter l'authentification API à l'aide de Laravel Passport et JWT ?

Développement Laravel : Comment implémenter l'authentification API à l'aide de Laravel Passport et JWT ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-06-13 23:41:58
original
1247 Les gens l'ont consulté

Développement Laravel : Comment implémenter l'authentification API à l'aide de Laravel Passport et JWT ?

L'authentification API (Application Programming Interface) est une exigence courante dans les applications Internet d'aujourd'hui. En tant que framework PHP populaire, Laravel fournit deux outils, Laravel Passport et JWT (JSON Web Tokens), qui peuvent nous aider à mettre en œuvre l'authentification API.

Cet article expliquera comment implémenter l'authentification API à l'aide de Laravel Passport et JWT. Dans le contenu suivant, nous comprendrons les concepts de base de ces deux outils et comment les configurer et les utiliser dans les applications Laravel.

Qu'est-ce que le passeport Laravel ?

Laravel Passport est un serveur OAuth2 spécialement développé pour le framework Laravel, qui peut nous aider à créer des systèmes d'authentification API rapidement et en toute sécurité. Passport fournit un ensemble d'API pour effectuer le processus d'authentification et a implémenté en interne une série de méthodes d'authentification spécifiées par le protocole OAuth2.

Parmi eux, OAuth2 est un protocole standard qui utilise l'autorisation proxy. L'autorisation proxy est un mécanisme d'autorisation permettant d'obtenir l'accès aux ressources au nom d'un utilisateur. Le protocole OAuth2 émet des « jetons d'accès » aux applications tierces pour accéder aux ressources protégées au nom de l'utilisateur. Par conséquent, Passport joue en réalité le rôle de serveur d’authentification OAuth2 dans les applications Laravel.

Qu'est-ce que JWT ?

JWT (JSON Web Tokens) est un standard ouvert (RFC 7519) pour l'authentification et l'autorisation dans les environnements réseau distribués. JWT est couramment utilisé pour transmettre des informations d'identité d'utilisateur authentifiées et des revendications entre clients et serveurs. JWT se compose de trois parties : en-tête, charge utile et signature.

Habituellement, l'en-tête contient le type de JWT et l'algorithme de cryptage utilisé, la charge utile contient des informations et des réclamations sur l'identité de l'utilisateur, et la signature est utilisée pour vérifier l'authenticité du JWT. Lors de l'utilisation de JWT pour l'authentification, le serveur détermine l'identité de l'utilisateur en déchiffrant les informations contenues dans le JWT, réalisant ainsi l'authentification API.

Configuration de Laravel Passport et JWT

Avant d'utiliser Laravel Passport et JWT pour l'authentification API, nous devons d'abord le configurer dans l'application Laravel. Voici les étapes de configuration spécifiques :

Étape 1 : Installez Laravel Passport et tymon/jwt-auth

Utilisez composer pour installer Laravel Passport et tymon/jwt-auth dans l'outil de ligne de commande :

composer require laravel/passport
composer require tymon/jwt-auth
Copier après la connexion

Étape 2 : Configurez Laravel Passport

Dans le fichier config/app.php, ajoutez le fournisseur de services suivant :

'providers' => [
    ...
    LaravelPassportPassportServiceProvider::class,
],
Copier après la connexion

Ensuite, exécutez la commande suivante pour créer la table de données de Passport :

php artisan migrate
Copier après la connexion

Pour la méthode d'authentification par défaut de Passport "Password Grant", nous l'ajoutons dans le modèle utilisateur "PassportHasApiTokens" (trait d'authentification utilisateur par défaut de Passport). Ouvrez le fichier User.php et ajoutez le contenu suivant :

use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    ...
}
Copier après la connexion

Étape 3 : Configurez JWT

Tout d'abord, dans le fichier config/app.php, ajoutez le JWTServiceProvider :

'providers' => [
    ...
    TymonJWTAuthProvidersLaravelServiceProvider::class,
],
Copier après la connexion

Ensuite, exécutez la commande suivante pour générer le secret clé requise pour JWT :

php artisan jwt:secret
Copier après la connexion

Dans le fichier config/auth.php, ajoutez la configuration jwt guard (utilisez jwt comme option guard) et définissez le pilote d'authentification par défaut sur "jwt":

'guards' => [
    ...
    'jwt' => [
        'driver' => 'jwt',
        'provider' => 'users'
    ],
],
...
'defaults' => [
    'guard' => 'jwt',
    ...
],
Copier après la connexion

Dans le fichier config/auth .php, ajoutez la configuration des utilisateurs du fournisseur d'utilisateurs JWT (instruction d'utiliser le modèle Eloquent) :

'providers' => [
    ...
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class
    ]
],
Copier après la connexion

Utilisation de Laravel Passport et JWT pour l'authentification API

Une fois la préparation terminée, nous pouvons volontiers implémenter l'authentification API à l'aide de Laravel Passport et JWT . Voici le processus de fonctionnement spécifique :

Étape 1 : Enregistrez la route API

Tout d'abord, enregistrez la route API dans le fichier routes/api.php. Par exemple, nous définissons une route GET pour obtenir des informations sur l'utilisateur :

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});
Copier après la connexion

Le middleware auth:api de Laravel est utilisé ici, ce qui garantira que les requêtes des utilisateurs authentifiés peuvent passer. Avec le middleware de routage, nous ajoutons cette étape d'authentification à la route.

Étape 2 : Créer un jeton d'accès

Les utilisateurs doivent accéder à l'API via le jeton d'accès. Nous devons utiliser un mot de passe pour autoriser le jeton d'accès. Les étapes spécifiques de mise en œuvre sont les suivantes :

Vous devez d'abord définir un itinéraire pour recevoir le nom d'utilisateur et le mot de passe fournis par l'utilisateur :

Route::post('/login', function (Request $request) {
    $http = new GuzzleHttpClient;

    $response = $http->post('http://your-app.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => 'client-id',
            'client_secret' => 'client-secret',
            'username' => $request->username,
            'password' => $request->password,
            'scope' => '',
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});
Copier après la connexion

Dans le code ci-dessus, nous utilisons le client GuzzleHttp pour envoyer une requête POST et obtenir un jeton d'accès. Parmi eux, grant_type doit être "password", client_id et client_secret correspondent respectivement à l'ID et au Secret appliqués dans Laravel Passport. Une fois la demande réussie, une réponse JSON sera renvoyée contenant le jeton d'accès de l'utilisateur access_token pour accéder à l'API.

Étape 3 : Lancer une demande d'API

Nous pouvons utiliser le jeton access_token obtenu pour envoyer une demande à l'API, vérifier l'identité de l'utilisateur et obtenir des ressources protégées. Lorsque vous effectuez une requête à l'API, vous devez ajouter la paire clé-valeur d'autorisation dans l'en-tête, dont la valeur est "Bearer access_token". Par exemple :

$accessToken = 'your-access-token';
$response = $http->withHeaders([
    'Authorization' => 'Bearer ' . $accessToken
])->get('http://your-app.com/api/user');
Copier après la connexion

Si la requête aboutit, l'API renverra les informations utilisateur.

Conclusion

Dans les applications Laravel, Laravel Passport fournit un puissant protocole d'authentification OAuth2 et une fonction d'authentification API, et JWT est une méthode d'authentification sûre et pratique. Dans le développement réel, nous pouvons utiliser Laravel Passport et JWT en combinaison pour améliorer la sécurité et la fiabilité de l'API et protéger les données des utilisateurs contre le vol ou la falsification par des attaquants malveillants.

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal