...
✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak używać Laravel Passport do uwierzytelniania REST API?

169

W dzisiejszym tworzeniu stron internetowych bardzo popularne są interfejsy API lub usługi sieciowe. Podczas tworzenia aplikacji mobilnej API pełni rolę pomostu do przekazywania danych między aplikacją mobilną a siecią. Zapewnienie bezpieczeństwa i uwierzytelniania wywołań API jest ważne dla ochrony danych przesyłanych między aplikacją a aplikacją.

W tym artykule zapoznamy się z Laravel Passport, który pozwala nam uwierzytelniać API. Passport jest budowany na górze serwera OAuth2, który jest znacznie bezpieczniejszy w sposobie budowania.

W przypadku interfejsów API wysyłaliśmy token dostępu, aby zweryfikować, czy przychodzące żądanie jest prawidłowe. Jeśli jest autoryzowany, to tylko on powinien umożliwiać interakcję z aplikacją. Paszport Laravel zapewnia wygodny sposób tworzenia i weryfikacji tokena względem wywołania API.

Instalacja

Na początek zakładamy, że zainstalowałeś Laravel w swoim systemie. Aby zainstalować Paszport, uruchom poniższe polecenie w terminalu.

composer require laravel/passport

Powyższe polecenie działałoby z najnowszą wersją Laravela. Jeśli używasz starszej wersji, polecenie będzie się nieco różnić w zależności od wersji Laravela. Na przykład, jeśli masz zainstalowany Laravel 5.5, twoje polecenie powinno wyglądać tak:

composer require laravel/passport=~4.0

To polecenie tworzy własny katalog migracji bazy danych. Te migracje spowodują utworzenie tabel przechowujących klientów i tokeny dostępu.

W swoim config/app.phppliku zarejestruj dostawcę usług paszportowych w tablicy providerów.

config/app.php

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

Uruchommy migrację, która utworzy tabele bazy danych dla Paszportu.

php artisan migrate

Teraz, jeśli przejdziesz do swojego klienta bazy danych, zauważysz nowe tabele utworzone w Twojej bazie danych.

Jak używać Laravel Passport do uwierzytelniania REST API?

Następnie uruchom poniższe polecenie, które tworzy klucze szyfrowania w celu wygenerowania bezpiecznych tokenów dostępu. Poniższe polecenie tworzy klientów „dostęp osobisty" i „przyznawanie hasła”, które są zapisywane w tabeli oauth_clients.

php artisan passport:install

Jak używać Laravel Passport do uwierzytelniania REST API?

Użytkownik może skopiować te tokeny do dalszych kroków. Właściwie zobaczymy 2 sposoby tworzenia tokenów dostępu. Jeden polega na tym, że klienci „przyznają hasło”, a drugi na uwierzytelnianiu logowania.

Konfiguracja paszportu

Udaj się do katalogów Laravel i otwórz AppUserplik modelu. W tym pliku musimy dodać LaravelPassportHasApiTokenscechę.

aplikacja/Użytkownik.php.

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

Następnie musimy wywołać Passport::routesmetodę w bootmetodzie 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();
    }
}

Na koniec w config/auth.phppliku ustaw opcję „sterownik” strażnika uwierzytelniania „api” na „paszport” w następujący sposób:

config/auth.php

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

Stwórz REST API i chroń go za pomocą Laravel Passport

Laravel tworzy plik, w routes/api.phpktórym powinniśmy zadeklarować nasz punkt końcowy REST API. Możemy chronić nasze API, dodając auth:apido niego oprogramowanie pośredniczące .

trasy/api.php

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

W przypadku wielu punktów końcowych nie musimy za każdym razem dodawać oprogramowania pośredniczącego. Zamiast tego możemy to zrobić w następujący sposób:

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

Ponieważ nasze „produkty” punktu końcowego są chronione, jeśli wywołamy je bezpośrednio bez tokena autoryzacji, otrzymamy odpowiedź „Nieuwierzytelniony”.

Jak używać Laravel Passport do uwierzytelniania REST API?

Oznacza to, że podczas wywoływania API należy w każdym żądaniu przekazać token autoryzacji. Tak więc Passport zweryfikuje token i zwróci odpowiedź.

Wygeneruj token dostępu dla API

Istnieje kilka sposobów na utworzenie tokena dostępu dla aplikacji. Zobaczymy 2 z nich w tym samouczku.

Pierwsza opcja

W pierwszej kolejności musisz wywołać /oauth/token z wymaganymi parametrami, a otrzymasz token w odpowiedzi.

Zakładamy, że do tworzenia żądań API używasz biblioteki Guzzle HTTP. Załóżmy, że masz inny projekt, z którego wysyłasz żądanie 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);

Powyższy kod zwraca tablicę zawierającą klucz ‘access_token’. Parametry client_id i client_secret otrzymaliśmy po uruchomieniu passport:install. Możesz również uzyskać te szczegóły z tabeli bazy danych „oauth_clients”.

Spróbuj ponownie od listonosza, przekazując access_token do punktu końcowego ‘products’ i powinniśmy otrzymać odpowiedź.

Jak używać Laravel Passport do uwierzytelniania REST API?

W rzeczywistości musisz wywołać to API jak poniżej:

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

Druga opcja

W pierwszej opcji powinieneś znać client_id i client_secret, aby wygenerować swój token. W niektórych sytuacjach może to nie być wygodny sposób. Passport zapewnia inną opcję generowania tokena dostępu wyłącznie za pomocą danych logowania.

W naszym ApiController.phpdodajmy metodę logowania z żądaniem postu i wpisujemy w nią poniższy kod.

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

Aby wykonać to wywołanie API, musimy zarejestrować dla niego trasę.

trasy/api.php

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

Użytkownik może wysłać żądanie HTTP post do tego interfejsu API, pisząc poniższy kod:

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

Jak używać Laravel Passport do uwierzytelniania REST API?

Mamy nadzieję, że rozumiesz zastosowanie Laravel Passport do uwierzytelniania REST API. Chcielibyśmy poznać Twoje przemyślenia w sekcji komentarzy poniżej. Zalecamy również zapoznanie się z artykułem Laravel API Tutorial: Jak zbudować i przetestować RESTful API, który uznaliśmy za przydatny dla czytelników.

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów