✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo usar Laravel Passport para la autenticación de API REST

924

En el desarrollo web actual, las API o los servicios web son muy populares. Al desarrollar una aplicación móvil, la API juega un papel de puente para pasar datos entre la aplicación móvil y la web. Mantener las llamadas a las API seguras y autenticadas es importante para proteger los datos que se transfieren de una aplicación a otra.

En este artículo, estudiamos sobre Laravel Passport que nos permite autenticar API. Passport está construido en la parte superior del servidor OAuth2, que es mucho más seguro en la forma en que se construye.

Cuando se trata de las API, solíamos enviar un token de acceso para verificar si la solicitud entrante es válida. Si está autorizado, solo debe permitir interactuar con la aplicación. El pasaporte de Laravel proporciona una forma conveniente de crear y verificar el token con la llamada a la API.

Instalación

Para comenzar, asumimos que ha instalado Laravel en su sistema. Para instalar Passport, ejecute el siguiente comando en la terminal.

composer require laravel/passport

El comando anterior funcionaría con la última versión de Laravel. Si está ejecutando una versión anterior, el comando será ligeramente diferente según su versión de Laravel. Por ejemplo, si tiene Laravel 5.5 instalado, su comando debería ser:

composer require laravel/passport=~4.0

Este comando crea su propio directorio de migraciones de base de datos. Estas migraciones crearán tablas que almacenan los clientes y tokens de acceso.

En su config/app.phparchivo, registre el proveedor de servicios de Passport en la matriz de proveedores.

config / app.php

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

Ejecutemos la migración que creará las tablas de la base de datos para Passport.

php artisan migrate

Ahora, si va a su cliente de base de datos, notará las nuevas tablas creadas en su base de datos.

Cómo usar Laravel Passport para la autenticación de API REST

A continuación, ejecute el siguiente comando que crea claves de cifrado para generar tokens de acceso seguro. El siguiente comando crea clientes de "acceso personal" y "concesión de contraseña" que se almacenan en la tabla oauth_clients.

php artisan passport:install

Cómo usar Laravel Passport para la autenticación de API REST

El usuario puede copiar estos tokens para los siguientes pasos. De hecho, vamos a ver 2 formas de crear tokens de acceso. Uno es a través de estos clientes de "concesión de contraseña" y otro es la autenticación de inicio de sesión.

Configuración de pasaporte

Dirígete a los directorios de Laravel y abre el AppUserarchivo del modelo. En este archivo necesitamos agregar un LaravelPassportHasApiTokensrasgo.

aplicación / User.php.

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

Después de esto, tenemos que llamar al Passport::routesmétodo en el bootmétodo de 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();
    }
}

Por último, en el config/auth.phparchivo, configure la opción ‘controlador’ de la protección de autenticación ‘api’ en ‘pasaporte’ de la siguiente manera:

config / auth.php

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

Cree una API REST y protéjala con Laravel Passport

Laravel crea un archivo routes/api.phpdonde debemos declarar nuestro punto final de API REST. Podemos proteger nuestra API agregando el middleware auth:api.

rutas / api.php

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

Para varios puntos finales, no es necesario agregar middleware cada vez. En cambio, podemos hacerlo de la siguiente manera:

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

Como nuestros ‘productos’ de punto final están protegidos si lo llamamos directamente sin el token de autorización, obtenemos una respuesta ‘No autenticado’.

Cómo usar Laravel Passport para la autenticación de API REST

Significa que, al llamar a la API, es esencial pasar el token de autorización en cada solicitud. Entonces, Passport verificará el token y devolverá la respuesta.

Generar token de acceso para API

Hay varias formas de crear un token de acceso para la aplicación. Veremos 2 de ellos para este tutorial.

Primera opción

En una primera forma, debes llamar al token / oauth / con los parámetros requeridos y obtendrás el token como respuesta.

Suponemos que está utilizando una biblioteca HTTP de Guzzle para realizar una solicitud de API. Supongamos que tiene otro proyecto desde el que realiza una solicitud de 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);

El código anterior devuelve una matriz que contiene una clave ‘access_token’. Los parámetros client_id y client_secret que obtuvimos cuando ejecutamos passport:install. También puede obtener estos detalles de la tabla de su base de datos ‘oauth_clients’.

Vuelva a intentarlo desde el cartero pasando el access_token al punto final de ‘productos’ y deberíamos obtener la respuesta.

Cómo usar Laravel Passport para la autenticación de API REST

En realidad, debe llamar a esta API como se muestra a continuación:

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

Segunda opción

En la primera opción, debe conocer client_id y client_secret para generar su token. Esta puede no ser una forma conveniente en algunos escenarios. Passport ofrece otra opción para generar token de acceso mediante credenciales de inicio de sesión únicamente.

En nuestro, ApiController.phpagregue el método de inicio de sesión con la solicitud de publicación y escriba el código a continuación.

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

Para realizar esta llamada a la API, necesitamos registrar una ruta para ella.

rutas / api.php

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

El usuario puede realizar una solicitud de publicación HTTP a esta API escribiendo el código a continuación:

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

Cómo usar Laravel Passport para la autenticación de API REST

Esperamos que comprenda el uso de Laravel Passport para la autenticación de API REST. Nos gustaría conocer su opinión en la sección de comentarios a continuación. También recomendamos leer el artículo Tutorial de la API de Laravel: Cómo construir y probar una API RESTful que encontramos útil para los lectores.

Fuente de grabación: 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