✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come utilizzare Laravel Passport per l’autenticazione API REST

216

Nello sviluppo web odierno, le API oi servizi web sono molto popolari. Durante lo sviluppo di un’applicazione mobile, l’API svolge un ruolo di ponte per il passaggio di dati tra l’applicazione mobile e il web. Mantenere le chiamate API sicure e autenticate è importante per proteggere i dati trasferiti da un’applicazione all’altra.

In questo articolo, studiamo Laravel Passport che ci consente di autenticare le API. Passport è costruito sulla parte superiore del server OAuth2, che è molto più sicuro nel modo in cui si costruisce.

Quando abbiamo a che fare con le API, inviavamo un token di accesso per verificare se la richiesta in arrivo era valida. Se è autorizzato, solo allora dovrebbe consentire l’interazione con l’applicazione. Il passaporto Laravel fornisce un modo conveniente per creare e verificare il token rispetto alla chiamata API.

Installazione

Per iniziare, supponiamo che tu abbia installato Laravel sul tuo sistema. Per installare Passport, esegui il comando seguente nel terminale.

composer require laravel/passport

Il comando sopra funzionerebbe con l’ultima versione di Laravel. Se stai utilizzando una versione precedente, il comando sarà leggermente diverso a seconda della tua versione di Laravel. Ad esempio, se hai installato Laravel 5.5, il tuo comando dovrebbe essere:

composer require laravel/passport=~4.0

Questo comando crea la propria directory di migrazione del database. Queste migrazioni creeranno tabelle che memorizzano i client e i token di accesso.

Nel tuo config/app.phpfile, registra il fornitore di servizi Passport nell’array dei fornitori.

config/app.php

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

Eseguiamo la migrazione che creerà le tabelle del database per Passport.

php artisan migrate

Ora, se vai al tuo client di database, noterai le nuove tabelle create nel tuo database.

Come utilizzare Laravel Passport per l'autenticazione API REST

Quindi, esegui il comando seguente che crea chiavi di crittografia per generare token di accesso sicuro. Il comando sottostante crea client "accesso personale" e "concessione password" che stanno ottenendo il negozio nella tabella oauth_clients.

php artisan passport:install

Come utilizzare Laravel Passport per l'autenticazione API REST

L’utente può copiare questi token per i passaggi successivi. In realtà, vedremo 2 modi per creare token di accesso. Uno è attraverso questi client "concessione della password" e un altro è sull’autenticazione di accesso.

Configurazione del passaporto

Vai alle directory di Laravel e apri il AppUserfile del modello. In questo file dobbiamo aggiungere LaravelPassportHasApiTokenstratto.

app/Utente.php.

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

Dopo questo, dobbiamo chiamare il Passport::routesmetodo nel bootmetodo di 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();
    }
}

Infine, nel config/auth.phpfile imposta l’opzione ‘driver’ di ‘api’ Authentication Guard su ‘passaporto’ come segue:

config/auth.php

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

Crea API REST e proteggila con Laravel Passport

Laravel crea un file in routes/api.phpcui dovremmo dichiarare il nostro endpoint delle API REST. Possiamo proteggere la nostra API aggiungendovi il middleware auth:api.

route/api.php

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

Per più endpoint non è necessario aggiungere ogni volta il middleware. Invece, possiamo farlo come segue:

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

Poiché i nostri "prodotti" dell’endpoint sono protetti se lo chiamiamo direttamente senza token di autorizzazione, otteniamo una risposta "Non autenticato".

Come utilizzare Laravel Passport per l'autenticazione API REST

Significa che durante la chiamata all’API è essenziale passare il token di autorizzazione in ogni richiesta. Quindi, Passport verificherà il token e restituirà la risposta.

Genera token di accesso per API

Esistono diversi modi per creare un token di accesso per l’applicazione. Ne vedremo 2 per questo tutorial.

Prima opzione

In un primo momento, devi dare una chiamata a /oauth/token con i parametri richiesti e otterrai il token in risposta.

Supponiamo che tu stia utilizzando una libreria HTTP Guzzle per effettuare richieste API. Supponiamo che tu abbia un altro progetto da cui stai effettuando la richiesta 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);

Il codice sopra restituisce un array che contiene una chiave ‘access_token’. I parametri client_id e client_secret che abbiamo ottenuto quando eseguiamo passport:install. Puoi anche ottenere questi dettagli dalla tabella del database ‘oauth_clients’.

Prova di nuovo dal postino passando access_token all’endpoint "prodotti" e dovremmo ottenere la risposta.

Come utilizzare Laravel Passport per l'autenticazione API REST

In realtà devi chiamare questa API come di seguito:

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

Seconda opzione

Nella prima opzione, dovresti conoscere client_id e client_secret per generare il tuo token. Questo potrebbe non essere un modo conveniente in alcuni scenari. Passport fornisce un’altra opzione per generare il token di accesso solo tramite le credenziali di accesso.

Nel nostro ApiController.phpaggiungi il metodo di accesso con richiesta di posta e scrivi il codice sottostante.

<?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); 
        } 
    }

Per effettuare questa chiamata API, dobbiamo registrare un percorso per essa.

route/api.php

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

L’utente può effettuare una richiesta di post HTTP a questa API scrivendo il codice seguente:

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

Come utilizzare Laravel Passport per l'autenticazione API REST

Ci auguriamo che tu capisca l’uso di Laravel Passport per l’autenticazione dell’API REST. Ci piacerebbe sentire i tuoi pensieri nella sezione commenti qui sotto. Ti consigliamo anche di leggere l’articolo Tutorial API Laravel: come creare e testare un’API RESTful che abbiamo trovato utile per i lettori.

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More