


Développement Laravel : Comment implémenter l'authentification API OAuth2 à l'aide de Laravel Passport ?
À mesure que l'utilisation des API devient de plus en plus populaire, la protection de la sécurité et de l'évolutivité des API devient de plus en plus critique. OAuth2 est devenu un protocole de sécurité API largement adopté qui permet aux applications d'accéder à des ressources protégées via une autorisation. Pour implémenter l'authentification OAuth2, Laravel Passport fournit un moyen simple et flexible. Dans cet article, nous apprendrons comment implémenter l'authentification API OAuth2 à l'aide de Laravel Passport.
Laravel Passport est une bibliothèque de serveur OAuth2 officiellement fournie qui peut facilement ajouter l'authentification OAuth2 à votre application Laravel. Il fournit une authentification API pour les clients du framework Laravel, protégeant les API et limitant l'accès aux ressources via des jetons. En quelques étapes de configuration, vous pouvez créer un serveur OAuth2 sécurisé et fournir une authentification et une autorisation pour votre API.
Pour commencer à utiliser Laravel Passport, vous devez l'installer. Vous pouvez l'installer via le gestionnaire de packages Composer :
composer require laravel/passport
Une fois Laravel Passport installé, vous devez exécuter des migrations pour créer les tables de base de données nécessaires :
php artisan migrate
Afin d'activer Laravel Passport, vous devez enregistrer le ServiceProvider et le middleware. . Ajoutez le ServiceProvider et le middleware suivants dans le fichier config/app.php :
'providers' => [ // ... LaravelPassportPassportServiceProvider::class, ], 'middleware' => [ // ... LaravelPassportHttpMiddlewareCreateFreshApiToken::class, ],
Laravel Passport nécessite une table "clés" pour émettre des jetons d'accès et des jetons d'actualisation. L'exécution de la commande suivante générera ce tableau :
php artisan passport:install
Cela créera une paire de clés RSA cryptées pour la signature et la vérification des jetons, ainsi qu'un client nommé "personal_access_client" et un client nommé "password_client". Ces deux clients sont utilisés pour créer différents types de jetons. Le premier client est utilisé pour générer des jetons d'accès personnels qui permettent au client d'accéder à n'importe quel point de terminaison d'API sécurisé avec l'authentification OAuth2. Le deuxième client est utilisé pour créer des jetons d'autorisation de mot de passe qui permettent au client d'obtenir un jeton d'accès via un nom d'utilisateur et un mot de passe.
Dans ce processus, vous devez également configurer Laravel Passport dans votre fichier config/auth.php. Vous devez ajouter le pilote de passeport à la garde API afin que Laravel Passport puisse gérer tout ce qui concerne OAuth2. Un exemple est le suivant :
'guards' => [ // ... 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
Maintenant que la configuration est terminée, nous pouvons commencer à créer des routes et des contrôleurs API.
Tout d'abord, vous devez définir vos routes API. Par exemple, disons que vous disposez d'un point de terminaison API pour obtenir une liste de tâches :
Route::get('/tasks', 'TaskController@index')->middleware('auth:api');
Ensuite, vous devez créer un contrôleur pour gérer la demande et répondre aux tâches :
class TaskController extends Controller { public function index() { $tasks = Task::all(); return response()->json([ 'tasks' => $tasks, ]); } }
Incluez le paramètre "auth:api" dans la méthode middleware pour nous demander d'utiliser les gardes API pour protéger les routes.
Voyons maintenant comment effectuer l'authentification OAuth2 et obtenir un jeton d'accès. Vous devez créer un client qui utilisera le flux OAuth2 d'autorisation par mot de passe pour obtenir le jeton d'accès. De cette façon, vous pouvez vous authentifier sur le point de terminaison de l'API avec des requêtes API.
Vous pouvez créer un nouveau client dans la liste des clients de Laravel Passport ou utiliser la méthode Passport::client() dans votre code pour générer un identifiant client aléatoire et un secret client pour le client. Vous pouvez enregistrer l'identifiant client et le secret client dans votre fichier .env ou vous pouvez les fournir directement dans votre méthode Passport::client(). Cette méthode créera un nouveau client et renverra l'identifiant client et le secret client :
use LaravelPassportClient; use IlluminateSupportFacadesDB; $client = $this->createClient(); public function createClient() { $client = Client::forceCreate([ 'user_id' => null, 'name' => 'Test Client', 'secret' => str_random(40), 'redirect' => '', 'personal_access_client' => false, 'password_client' => true, 'revoked' => false, ]); DB::table('oauth_client_grants')->insert([ 'client_id' => $client->id, 'grant_id' => 1, ]); return $client; }
Maintenant que nous avons un client, nous devons utiliser Laravel Passport dans le contrôleur pour obtenir le jeton d'accès et l'utiliser pour accéder au point de terminaison de l'API protégé. Nous devons implémenter l'authentification OAuth2 dans le contrôleur en utilisant le code suivant :
use IlluminateSupportFacadesAuth; use LaravelPassportClientRepository; class TaskController extends Controller { protected $clients; public function __construct(ClientRepository $clients) { $this->clients = $clients; } public function index() { $client = $this->clients->find(2); $response = $this->actingAsClient($client, function () { return $this->get('/api/tasks'); }); return $response->getContent(); } protected function actingAsClient($client, $callback, $scopes = []) { $proxy = new LaravelPassportHttpControllersAccessTokenController(); $token = $proxy->issueToken( $this->getPersonalAccessTokenRequest($client, $scopes) ); Auth::guard('web')->loginUsingId($client->user_id); $callback($token); return $this->app->make(IlluminateHttpRequest::class); } protected function getPersonalAccessTokenRequest($client, $scopes = []) { $data = [ 'grant_type' => 'client_credentials', 'client_id' => $client->id, 'client_secret' => $client->secret, 'scope' => implode(' ', $scopes), ]; return IlluminateHttpRequest::create('/oauth/token', 'POST', $data); } }
En utilisant la méthode actAsClient(), nous pouvons simuler l'exécution de la requête en tant que client et n'importe quelle méthode du contrôleur peut utiliser cette méthode pour l'authentification OAuth2. Nous devons transmettre un objet client, une fonction de rappel pour effectuer la requête API et éventuellement les autorisations à ajouter à la requête.
Maintenant que nous avons terminé la configuration de l'authentification OAuth2 de Laravel Passport, en utilisant le modèle de code ci-dessus, nous pouvons facilement implémenter l'authentification OAuth2 sécurisée sur nos points de terminaison API. Passport est un projet relativement nouveau. Cependant, il est parfaitement intégré à Laravel et fournit plusieurs services d'authentification OAuth2, vous permettant d'ajouter facilement une authentification et une autorisation à votre API. Si vous exécutez une application Laravel et devez ajouter l'authentification OAuth2, Laravel Passport est idéal à cet effet.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

Connexion de la base de données des locataires personnalisés dans le package d'extension multi-locataire Laravel Stancl / location Lors de la construction d'applications multi-locataires à l'aide du package d'extension multi-locataire Laravel Stancl / location, ...

Laravel - URL d'action - Laravel 5.7 introduit une nouvelle fonctionnalité appelée « URL d'action appelable ». Cette fonctionnalité est similaire à celle de Laravel 5.6 qui accepte la méthode string in action. L'objectif principal de la nouvelle syntaxe introduite par Laravel 5.7 est de diriger
