WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как использовать Laravel Passport для аутентификации REST API

900

В современной веб-разработке очень популярны API или веб-сервисы. При разработке мобильного приложения API играет роль моста для передачи данных между мобильным приложением и Интернетом. Обеспечение безопасности и аутентификации вызовов API важно для защиты данных, передаваемых между приложением.

В этой статье мы изучаем Laravel Passport, который позволяет нам аутентифицировать API. Passport построен поверх сервера OAuth2, который намного безопаснее с точки зрения безопасности.

При работе с API мы использовали для отправки токена доступа, чтобы проверить, действителен ли входящий запрос. Если он авторизован, то только он должен разрешать взаимодействие с приложением. Паспорт Laravel предоставляет удобный способ создания токена и проверки его соответствия вызову API.

Монтаж

Для начала предположим, что вы установили Laravel в своей системе. Чтобы установить Паспорт, выполните следующую команду в терминале.

composer require laravel/passport

Вышеупомянутая команда будет работать с последней версией Laravel. Если вы используете более старую версию, команда будет немного отличаться в зависимости от вашей версии Laravel. Например, если у вас установлен Laravel 5.5, ваша команда должна быть:

composer require laravel/passport=~4.0

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

В своем config/app.phpфайле зарегистрируйте поставщика услуг паспорта в массиве поставщиков.

config / app.php

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

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

php artisan migrate

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

Как использовать Laravel Passport для аутентификации REST API

Затем запустите приведенную ниже команду, которая создает ключи шифрования для генерации токенов безопасного доступа. Команда ниже создает клиентов «персональный доступ» и «предоставление пароля», которые сохраняются в таблице oauth_clients.

php artisan passport:install

Как использовать Laravel Passport для аутентификации REST API

Пользователь может скопировать эти токены для следующих шагов. Фактически, мы увидим 2 способа создания токенов доступа. Один – через клиентов с «предоставлением пароля», а другой – через аутентификацию при входе в систему.

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

Перейдите в каталоги Laravel и откройте AppUserфайл модели. В этом файле нам нужно добавить LaravelPassportHasApiTokensтрейт.

приложение / User.php.

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

После этого мы должны вызвать Passport::routesметод в bootметоде AuthServiceProvider.

приложение / Провайдеры / 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 Passport

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 Passport для аутентификации REST API

Это означает, что при вызове API необходимо передавать токен авторизации в каждом запросе. Итак, Passport проверит токен и вернет ответ.

Создать токен доступа для API

Есть несколько способов создать токен доступа для приложения. В этом уроке мы увидим 2 из них.

Первый вариант

Во-первых, вы должны вызвать токен / oauth / с необходимыми параметрами, и вы получите токен в ответ.

Мы предполагаем, что вы используете HTTP-библиотеку Guzzle для выполнения запросов к 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 Passport для аутентификации 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 Passport для аутентификации REST API

Мы надеемся, что вы понимаете использование Laravel Passport для аутентификации REST API. Мы хотели бы услышать ваши мысли в разделе комментариев ниже. Мы также рекомендуем ознакомиться со статьей Laravel API Tutorial: How to Build and Test RESTful API, которую мы нашли полезной для читателей.

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее