Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment utiliser Laravel Passport pour l’authentification API REST

646

Dans le développement Web d’aujourd’hui, les API ou les services Web sont très populaires. Lors du développement d’une application mobile, l’API joue un rôle de passerelle pour la transmission de données entre l’application mobile et le web. Il est important de garder les appels d’API sécurisés et authentifiés pour protéger les données transférées d’une application à l’autre.

Dans cet article, nous étudions le Laravel Passport qui nous permet d’authentifier les API. Passport est construit sur le dessus du serveur OAuth2 qui est beaucoup plus sécurisé dans la façon dont il est construit.

Lors du traitement des API, nous envoyions un jeton d’accès pour vérifier si la demande entrante est valide. S’il est autorisé, alors seulement il devrait permettre d’interagir avec l’application. Le passeport Laravel fournit un moyen pratique de créer et de vérifier le jeton par rapport à l’appel d’API.

Installation

Pour commencer, nous supposons que vous avez installé Laravel sur votre système. Pour installer le passeport, exécutez la commande ci-dessous dans le terminal.

composer require laravel/passport

La commande ci-dessus fonctionnerait avec la dernière version de Laravel. Si vous utilisez une ancienne version, la commande sera légèrement différente en fonction de votre version de Laravel. Par exemple, si Laravel 5.5 est installé, votre commande devrait être :

composer require laravel/passport=~4.0

Cette commande crée son propre répertoire de migrations de bases de données. Ces migrations créeront des tables qui stockeront les clients et les jetons d’accès.

Dans votre config/app.phpfichier, enregistrez Passport service provider dans le tableau des fournisseurs.

config/app.php

'providers' =>[
  ....
  LaravelPassportPassportServiceProvider::class,
],

Exécutons la migration qui créera les tables de base de données pour Passport.

php artisan migrate

Maintenant, si vous allez dans votre client de base de données, vous remarquerez les nouvelles tables créées dans votre base de données.

Comment utiliser Laravel Passport pour l'authentification API REST

Ensuite, exécutez la commande ci-dessous qui crée des clés de chiffrement pour générer des jetons d’accès sécurisés. La commande ci-dessous crée des clients « accès personnel » et « octroi de mot de passe » qui sont stockés dans la table oauth_clients.

php artisan passport:install

Comment utiliser Laravel Passport pour l'authentification API REST

L’utilisateur peut copier ces jetons pour les étapes suivantes. En fait, nous allons voir 2 façons de créer des jetons d’accès. L’un est à travers ces clients « octroi de mot de passe » et un autre est sur l’authentification de connexion.

Configuration du passeport

Dirigez-vous vers les répertoires Laravel et ouvrez le AppUserfichier modèle. Dans ce fichier, nous devons ajouter LaravelPassportHasApiTokenstrait.

app/Utilisateur.php.

<?php
 
namespace App;
 
use LaravelPassportHasApiTokens;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
 
class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    ....
}

Après cela, nous devons appeler la Passport::routesméthode dans la bootméthode de AuthServiceProvider.

app/Providers/AuthServiceProvider.php

<?php
 
namespace AppProviders;
 
use LaravelPassportPassport;
use IlluminateSupportFacadesGate;
use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
 
class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'AppModel' => 'AppPoliciesModelPolicy',
    ];
 
    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
 
        Passport::routes();
    }
}

Enfin, dans le config/auth.phpfichier, définissez l’option ‘driver’ de ‘api’ authentication guard sur ‘passport’ comme suit :

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
 
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

Créez une API REST et protégez-la avec Laravel Passport

Laravel crée un fichier dans routes/api.phplequel nous devons déclarer le point de terminaison de nos API REST. Nous pouvons protéger notre API en y ajoutant le middleware auth:api.

routes/api.php

Route::get('/api/categories', 'ApiController@categories')->middleware('auth:api');

Pour plusieurs points de terminaison, nous n’avons pas besoin d’ajouter un middleware à chaque fois. Au lieu de cela, nous pouvons le faire comme suit :

Route::group(['middleware' => 'auth:api'], function(){
    Route::get('products', 'ApiController@products');
    Route::get('categories', 'ApiController@categories');
});

Comme nos « produits » de point de terminaison sont protégés si nous l’appelons directement sans jeton d’autorisation, nous obtenons une réponse « non authentifié ».

Comment utiliser Laravel Passport pour l'authentification API REST

Cela signifie que lors de l’appel de l’API, il est essentiel de transmettre le jeton d’autorisation dans chaque demande. Ainsi, Passport vérifiera le jeton et renverra la réponse.

Générer un jeton d’accès pour l’API

Il existe plusieurs façons de créer un jeton d’accès pour l’application. Nous en verrons 2 pour ce tutoriel.

Première option

Dans un premier temps, vous devez appeler le /oauth/token avec les paramètres requis et vous obtiendrez le token en réponse.

Nous supposons que vous utilisez une bibliothèque HTTP Guzzle pour effectuer une requête API. Disons que vous avez un autre projet à partir duquel vous faites une demande d’API.

<?php
require_once "vendor/autoload.php";
 
use GuzzleHttpClient;
 
$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'http://laravel.dev',
]);
 
$response = $client->post('/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => '2',
        'client_secret' => '8qyKG7WKb3O3FZh2hUyEOZ3dAj5l9S5ljn2bdeJf',
        'username' => '[email protected]',
        'password' => 'my_password',
        'scope' => '*',
    ],
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

Le code ci-dessus renvoie un tableau qui contient une clé ‘access_token’. Les paramètres client_id et client_secret que nous avons obtenus lors de l’exécution de passport:install. Vous pouvez également obtenir ces détails à partir de votre table de base de données ‘oauth_clients’.

Essayez à nouveau depuis le facteur en passant le access_token au point de terminaison « produits » et nous devrions obtenir la réponse.

Comment utiliser Laravel Passport pour l'authentification API REST

En réalité, vous devez appeler cette API comme ci-dessous :

$response = $client->get('/products', [
    'headers' => [
        'Authorization' => 'Bearer '.$access_token,
    ]
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

Deuxième option

Dans la première option, vous devez connaître client_id et client_secret pour générer votre jeton. Cela peut ne pas être un moyen pratique dans certains scénarios. Passport fournit une autre option pour générer un jeton d’accès via les informations de connexion uniquement.

Dans notre ApiController.phpajoutez la méthode de connexion avec la demande de publication et écrivez le code ci-dessous dedans.

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
use IlluminateSupportFacadesAuth;
 
class ApiController extends Controller
{
    public function login(){ 
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
            $user = Auth::user(); 
            $success['token'] =  $user->createToken('MyApp')-> accessToken; 
            return response()->json(['success' => $success], 200); 
        } 
        else{ 
            return response()->json(['error'=>'Unauthorised'], 401); 
        } 
    }

Pour effectuer cet appel d’API, nous devons enregistrer une route pour celui-ci.

routes/api.php

Route::post('login', 'ApiController@login');

L’utilisateur peut envoyer une requête HTTP post à cette API en écrivant le code ci-dessous :

$response = $client->post('/api/login', [
    'form_params' => [
        'email' => '[email protected]',
        'password' => 'my_password'
    ],
]);
 
$arr_result = json_decode((string) $response->getBody(), true);

Comment utiliser Laravel Passport pour l'authentification API REST

Nous espérons que vous comprenez l’utilisation de Laravel Passport pour l’authentification API REST. Nous aimerions entendre vos pensées dans la section des commentaires ci-dessous. Nous vous recommandons également de parcourir l’article Laravel API Tutorial: How to Build and Test a RESTful API que nous avons trouvé utile pour les lecteurs.

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails