Laravel permisos con Passport
Para controlar los permisos de accesos se puede utilizar 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
- 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
- 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:
- Url: terminada en /oauth/token
Ej: http://api.test/oauth/token - Headers: introducir los siguientes datos
Key=Accept y Value=applicantion/json - 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