...
✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Laraveli passi kasutamine REST API autentimiseks

25

Tänapäeva veebiarenduses on API-d või veebiteenused väga populaarsed. Mobiilirakenduse väljatöötamise ajal mängib API silda andmete edastamisel mobiilirakenduse ja veebi vahel. Rakenduste vahel rakenduste vahel edastatavate andmete kaitsmiseks on oluline hoida API-kõnesid turvaliselt ja autentitud.

Selles artiklis uurime Laraveli passi, mis võimaldab meil API-sid autentida. Passport on ehitatud OAuth2 serveri ülaosale, mis on selle ehitamise viis palju turvalisem.

API-de käsitlemisel saatsime sissepääsuloa, et kontrollida, kas sissetulev taotlus on kehtiv. Kui see on lubatud, peaks ainult see võimaldama rakendusega suhtlemist. Laraveli pass pakub mugavat viisi, kuidas luua ja kontrollida API-kõne kaudu luba.

Paigaldamine

Alustamiseks eeldame, et olete Laraveli oma süsteemi installinud. Passi installimiseks käivitage terminalis järgmine käsk.

composer require laravel/passport

Ülaltoodud käsk töötab Laraveli uusima versiooniga. Kui kasutate vanemat versiooni, on käsk veidi erinev, sõltuvalt teie Laraveli versioonist. Näiteks kui Laravel 5.5 on installitud, peaks teie käsk olema:

composer require laravel/passport=~4.0

See käsk loob oma andmebaaside migreerimise kataloogi. Need migreerimised loovad tabeleid, kuhu salvestatakse kliendid ja juurdepääsuload.

config/app.phpRegistreerige oma failis Passsi teenuse pakkuja pakkujate massiivi.

config / app.php

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

Käivitame migreerimise, mis loob Passportsi andmebaasitabelid.

php artisan migrate

Nüüd, kui lähete oma andmebaasi kliendi juurde, märkate oma andmebaasis loodud uusi tabeleid.

Laraveli passi kasutamine REST API autentimiseks

Järgmisena käivitage järgmine käsk, mis loob turvaliste juurdepääsulubade loomiseks krüptovõtmed. Allpool olev käsk loob "isikliku juurdepääsu" ja "parooli andmise" kliendid, kes on tabelisse salvestatud oauth_clients.

php artisan passport:install

Laraveli passi kasutamine REST API autentimiseks

Järgmiste toimingute jaoks saab kasutaja need märgid kopeerida. Tegelikult näeme kahte viisi pääsumärkide loomiseks. Üks on selle parooli andmise klientide kaudu ja teine ​​sisselogimise autentimine.

Passi seadistamine

Minge Laraveli kataloogidesse ja avage mudelifail AppUser. Selles failis peame lisama LaravelPassportHasApiTokenstunnuse.

app / User.php.

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

Pärast seda on meil helistada Passport::routesmeetodi bootmeetod 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();
    }
}

Lõpuks config/auth.phpseadistage failis „api" autentimisvalvuri „draiveri” väärtuseks „pass” järgmiselt:

config / auth.php

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

Looge REST API ja kaitske seda Laraveli passiga

Laravel loob faili, routes/api.phpkus peaksime deklareerima oma REST API-de lõpp-punkti. Saame kaitsta oma API-d, lisades sellele vahevara auth:api.

marsruudid / api.php

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

Mitme lõpp-punkti jaoks ei pea me iga kord vahevara lisama. Selle asemel saame seda teha järgmiselt:

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

Kuna meie lõpp-punkt „tooted” on kaitstud, kui me nimetame seda otse ilma autoriseerimiseta, saame vastuse „Autentimata”.

Laraveli passi kasutamine REST API autentimiseks

See tähendab, et API-le helistamise ajal on hädavajalik, et igas taotluses edastataks autoriseerimisluba. Niisiis, Passport kontrollib loa ja tagastab vastuse.

Looge API-le juurdepääsuluba

Rakenduse juurdepääsuloa loomiseks on mitu võimalust. Näeme selle õpetuse jaoks neist kahte.

Esimene võimalus

Esmalt peate helistama nõutavate parameetritega / oauth / tokenile ja saate vastuseks märgi.

Eeldame, et kasutate API-päringu tegemiseks Guzzle’i HTTP-teeki. Oletame, et teil on veel üks projekt, kust teete API-päringut.

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

Koodi kohal tagastatakse massiiv, mis sisaldab võtit ‘access_token’. Parameetrid klient_id ja kliendi saladus, mille saime käivitamisel passport:install. Need üksikasjad saate ka oma andmebaasitabelist ‘oauth_clients’.

Proovige uuesti postiljonilt, edastades pääsupunkti ‘tooted’ lõpp-punkti ja peaksime vastuse saama.

Laraveli passi kasutamine REST API autentimiseks

Tegelikult peate sellele API-le helistama nagu allpool:

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

Teine võimalus

Esimese valiku korral peaksite oma loa genereerimiseks teadma client_id ja client_secret. Mõnes stsenaariumis ei pruugi see olla mugav viis. Pass annab veel ühe võimaluse juurdepääsuloa loomiseks ainult sisselogimismandaatide kaudu.

Meie ApiController.phplisage sisselogimismeetod koos postitaotlusega ja kirjutage sinna allolev kood.

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

Selle API kõne tegemiseks peame selle jaoks marsruudi registreerima.

marsruudid / api.php

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

Kasutaja saab sellele API-le HTTP-postitaotluse esitada, kirjutades alloleva koodi:

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

Laraveli passi kasutamine REST API autentimiseks

Loodame, et mõistate Laraveli passi kasutamist REST API autentimiseks. Soovime teie mõtteid kuulda allpool olevas kommentaaride jaotises. Samuti soovitame läbi lugeda artikli Laraveli API õpetus: kuidas ehitada ja testida RESTful API-d, mis meie arvates oli lugejatele kasulik.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem