✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як використовувати паспорт Laravel для автентифікації REST API

13

У сучасній веб-розробці дуже популярні API або веб-сервіси. Розробляючи мобільний додаток, API відіграє роль моста для передачі даних між мобільним додатком та Інтернетом. Забезпечення безпечного та автентифікованого виклику API важливо для захисту даних, що передаються між програмами.

У цій статті ми вивчаємо паспорт Laravel, який дозволяє нам автентифікувати API. Паспорт побудований на верхній частині сервера OAuth2, який набагато безпечніший у своїй побудові.

Маючи справу з API, ми раніше відправляли маркер доступу, щоб перевірити, чи є вхідний запит дійсним. Якщо це дозволено, лише воно повинно дозволяти взаємодію з додатком. Паспорт Laravel забезпечує зручний спосіб створення та перевірки токена щодо виклику API.

Встановлення

Для початку ми припускаємо, що ви встановили Laravel у свою систему. Щоб встановити Паспорт, запустіть наведену нижче команду в терміналі.

composer require laravel/passport

Вищенаведена команда буде працювати з останньою версією Laravel. Якщо у вас запущена старіша версія, команда буде дещо відрізнятися залежно від вашої версії Laravel. Наприклад, якщо встановлено Laravel 5.5, то ваша команда повинна бути такою:

composer require laravel/passport=~4.0

Ця команда створює власний каталог міграцій бази даних. Ці міграції створять таблиці, в яких зберігаються клієнти та маркери доступу.

У своєму config/app.phpфайлі зареєструйте постачальника послуг Passport у масиві постачальників.

config / app.php

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

Давайте запустимо міграцію, яка створить таблиці бази даних для Passport.

php artisan migrate

Тепер, якщо ви перейдете до клієнта бази даних, ви помітите нові таблиці, створені у вашій базі даних.

Як використовувати паспорт Laravel для автентифікації REST API

Далі запустіть наведену нижче команду, яка створює ключі шифрування для генерації маркерів безпечного доступу. Нижче команда створює клієнтів «персонального доступу» та «надання пароля», які зберігаються у таблиці oauth_clients.

php artisan passport:install

Як використовувати паспорт Laravel для автентифікації REST API

Користувач може скопіювати ці маркери для подальших кроків. Власне, ми побачимо 2 способи створення токенів доступу. Один з них здійснюється за допомогою цього клієнта «надання пароля», а інший – аутентифікацію входу.

Конфігурація паспорта

Перейдіть до каталогів Laravel і відкрийте AppUserфайл моделі. У цьому файлі нам потрібно додати LaravelPassportHasApiTokensознаку.

app / User.php.

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

Після цього ми повинні викликати Passport::routesметод у bootметоді 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();
    }
}

Нарешті, у config/auth.phpфайлі встановіть для параметра «драйвер» захисника автентифікації «api» значення «паспорт» таким чином:

config / auth.php

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

Створіть REST API і захистіть його за допомогою паспорта Laravel

Laravel створює файл, routes/api.phpде ми повинні оголосити кінцеву точку наших REST API. Ми можемо захистити наш API, додавши до нього проміжне програмне забезпечення auth:api.

маршрути / api.php

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

Для кількох кінцевих точок нам не потрібно кожного разу додавати проміжне програмне забезпечення. Натомість ми можемо зробити це наступним чином:

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

Оскільки наша кінцева точка "продукти" захищена, якщо ми викликаємо її безпосередньо без маркера авторизації, ми отримуємо відповідь "Неаутентифікований".

Як використовувати паспорт Laravel для автентифікації REST API

Це означає, що під час виклику API важливо передавати маркер авторизації у кожному запиті. Отже, Passport перевірить маркер і поверне відповідь.

Створити маркер доступу для API

Існує кілька способів створити маркер доступу для програми. Ми побачимо 2 з них для цього підручника.

Перший варіант

По-перше, вам потрібно викликати / oauth / token з необхідними параметрами, і ви отримаєте маркер у відповідь.

Ми вважаємо, що ви використовуєте Guzzle HTTP-бібліотеку для надсилання запитів API. Скажімо, у вас є інший проект, звідки ви робите запит 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);

Наведений вище код повертає масив, що містить ключ ‘access_token’. Параметри client_id та client_secret ми отримали під час запуску passport:install. Ви також можете отримати ці дані з таблиці бази даних ‘oauth_clients’.

Знову спробуйте від листоноші, передавши access_token кінцевій точці ‘products’, і ми повинні отримати відповідь.

Як використовувати паспорт Laravel для автентифікації REST API

Насправді вам потрібно викликати цей API, як показано нижче:

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

Другий варіант

У першому варіанті ви повинні знати client_id та client_secret, щоб створити свій маркер. Це може бути не зручним способом у деяких сценаріях. Passport надає ще одну можливість генерування маркера доступу лише через облікові дані для входу.

У нашому ApiController.phpдодайте метод входу із запитом на повідомлення та напишіть у ньому код нижче.

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

Для здійснення цього виклику API нам потрібно зареєструвати для нього маршрут.

маршрути / api.php

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

Користувач може зробити запит на публікацію HTTP до цього API, написавши код нижче:

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

Як використовувати паспорт Laravel для автентифікації REST API

Ми сподіваємось, ви розумієте використання Laravel Passport для автентифікації REST API. Ми хотіли б почути ваші думки в розділі коментарів нижче. Ми також рекомендуємо переглянути статтю Підручник з API Laravel: Як створити та протестувати RESTful API, який ми знайшли корисним для читачів.

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі