Laravel permisos con Passport

Para controlar los permisos de accesos se puede utilizar Passport.

Índice
  1. Instalar Passport en laravel
  2. Configurar Passport en el proyecto Laravel
  3. Crear un cliente con Passport

Instalar Passport en laravel

En línea de comandos situado dentro del directorio del proyecto, teclear en la línea de comandos

composer require laravel/passport

Después ejecutar las migraciones para creación de tablas y campos correspondientes

php artisan migrate

Instalar keys uuids para tokens

Una vez finalziada las migraciones ejecutar tambien el siguiente comando de instalación

php artisan passport:install

Este comando de instalación ha creado dos ficheros con id secuencial comenzando por el id 1.

Si lo que se desea es dar un Client UUIDs más complejo para garantizar más seguridad, se puede utilizar el comando de instalación:

php artisan passport:install --uuids

  1. Ficheros key de cliente público, que son certificados de llave para que el paquete passport pueda generar y utilizar los token necesarios.
    storage\oauth-public.key
  2. Ficheros de key cliente privado, que son certificados de llave privada, para que el paquete passport pueda generar y utilizar los token necesarios.
    storage\oauth-private.key

Ubicación de los certificados.

Destacar que donde se guarda por defecto es en la carpeta storage y ésta no se sube a un repositorio, por lo que para subir al sitio web de producción hay que subir los ficheros.

Opción 1: Ejecutar en el servidor de produccón el siguiente comando

php artisan passport:keys

Opción 2: publicar los ficheros para que vayan a la carpeta config con el siguiente comand:

php artisan vendor:publish --tag=passport-config

Este comando genera el fichero en la carpeta config el fichero passport.php, en el cual hay que copiar el contenido del las llaves generadas anteriormente.

config\passport.php

'private_key' => env('PASSPORT_PRIVATE_KEY'),
'public_key' => env('PASSPORT_PUBLIC_KEY'),

Dado que son variables, lo recomendables es definirlas en el fichero .env para garantizar más seguridad, y pegar el contenido de los ficheros entre comillas

storage\oauth-private.key
storage\oauth-public.key

PASSPORT_PRIVATE_KEY=""
PASSPORT_PUBLIC_KEY=""

Configurar Passport en el proyecto Laravel

Es necesario configurar varios ficheros para que Passport funcione correctamente.

Configurar Modelo User

Ir a la ruta app\Models\ y abrir el fichero app\Models\User.php

Agregar la definición del trait en la parte superior use Laravel\Sanctum\HasApiTokens, y dentro de la clase utilizarlo use HasApiTokens.

use Laravel\Sanctum\HasApiTokens;

...

class User extends Authenticatable
{
    use HasApiTokens ...

Configurar las rutas en Providers

Ir a la ruta app\Providers\ y abrir el fichero AuthServiceProvider.php

Agregar la definición en la parte superior use Laravel\Passport\Passport , y dentro del método boot agregar también Passport::routes()

use Laravel\Passport\Passport;

...

public function boot()
    {
        ...
        Passport::routes();
    }

Para ver todas las rutas que se han generado ejecutar el comando r:l pero indicando el nombre

php artisan r:l --name=passport

Crear un cliente con Passport

Desde la línea de comandos hay que escribir el siguiente comando

php artisan passport:client --password

Después de ejecutar pregunta si se desea dar un nombre al cliente, en caso contrario pone uno por defecto Laravel Password Grant Client. Pulsar tecla intro.

También pregunta si se desea asignar a un usuario, y pulsar tecla intro.

Utilizar credenciales de cliente.

Finalmente hay que guardar las credenciales generadas en el cliente donde se van a utilizar.

Ejemplo:

Client ID: 95ad9e65-d823-48c0-8483-31-----
Client secret: IRooodt5uC11LDvkvHb2mnQM-------

Hacer una llamada a la API con PostMan

Para hacer una llamanda con PostMan se puede realizar con los siguientes pasos:

  1. Url: terminada en /oauth/token
    Ej: http://api.test/oauth/token
  2. Headers: introducir los siguientes datos
    Key=Accept y Value=applicantion/json

    header cliente api con postman
  3. Body: indicar que se va a utilizar cliente de tipo password a través de un formulario "form-data"
    Key= grant_type y Value= password
    Key= client_id y Value= 95ad9e65-d823-48c0-8483-31----- (codigo generado anteriormente)
    Key= client_secret y Value= IRooodt5uC11LDvkvHb2mnQM-------
    Key= Username y Value= [email protected]
    Key= password y Value= passwordusuario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir