Conectar dos servidores con Laravel Passport

Escenario

Estoy en el proceso de separar la parte API de una web de la del frontend. Para ello he creado un nuevo proyecto que solo atenderá peticiones del API. Ambos proyectos comparten la base de datos; en el proyecto API (PA) instalé Laravel Passport para gestionar la autenticación. El proyecto web (PW) necesita por tanto autenticarse en al API para mostrar los datos en sus páginas.

Problema

PA solo admite autenticación por OAuth, gestionada por Passport; como es obvio no vamos a pedir al usuario que se identifique en dos sitios. Necesito un sistema que permita a PW invocar PA sin necesidad de enviar el usuario y contraseña.

Solución

# Configuración del servidor del API

Para empezar damos de alta un nuevo cliente de Passport con el siguiente comando: Tras asignarle un nombre (o dejar el de por defecto), el comando nos debería devolver la siguiente información que habremos de guardar para su posterior uso:

Vamos a necesitar añadir un nuevo middleware que gestione las peticiones con un token de cliente, y la ruta que nos devolverá las credenciales del usuario:

EnHttp/Kernel.php en la lista $routeMiddleware: En routes/api.php El controlador tendría esta pinta: Y la serialización del usuario ésta:

# Configuración del servidor web

He instalado Socialite, una biblioteca de Laravel que usa OAuth para autenticarse con proveedores externos. Empezamos por configurar el servidor web, añadimos este nuevo servicio en config/services.php: Las correspondientes claves en .env Y añadimos el proveedor en config.app: Una vez configurado creamos el proveedor de Passport extendiendo Laravel\Socialite\Two\AbstractProvide;
Nota: uso Sentinel para la autenticación/autorización en la aplicación, en caso de usar la herramienta incluida por defecto en Laravel habría que remplazar Sentinel::getUser()->id por auth()->user()->id.
Extendemos Socialite para que incluya el driver passport Ahora podemos usar un controlador que que devolverá la información del usuario con el token para autenticarse en el API. En routes/web.php Y en Frontend\SecurityController@apiProviderCallback: Que devolería este JSON: Si quisiéramos acceder por javascript desde PW al PA, haríamos algo del tipo:
Nota: en caso de topar con errores relacionados con ‘Access-Control-Allow-Origin’, prueba a instalar el paquete laravel-cors.

Publicaciones Similares

  • Cómo recuperar ficheros borrados de Amazon Linux

    Escenario Tenemos una aplicación de tipo SpringBoot desplegada en una instancia ec2 de Amazon, con el sistema operativo Amazon Linux. Para sincronizar los cambios con el código desplegado en producción utilizo rsync en este script de bash:

    Ayer cuando desplegué, la aplicación no compilaba en el servidor remoto. Era debido a que una clase…

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Instalando EAC en Ubuntu

    Para ser más concretos en Ubuntu 12.04. Ahí van los pasos: Para estar a la última me he instalo lo más nuevecito (hasta la fecha) de wine, en dos pasos: 1. Añadimos la fuente siguiente a nuestro repositorio: $ sudo add-apt-repository ppa:ubuntu-wine/ppa 2. El consabido: $ sudo apt-get update 3. seguido de un: $ sudo apt-get install wine1.7 4. Antes de proseguir configuramos mínimamente wine:…

  • OsTicket y nginx

    Escenario Después de 5 años campando en un Ubuntu 16.04 ha llegado la hora de migrar la aplicación osTicket a un nuevo servidor. Para quien no la conozca osTicket es un sistema de incidencias que podemos desplegar en un servidor propio. La aplicación web cuenta con una herramienta que automáticamente detecta una diferencia de versiones…

Deja una respuesta

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