Laravel Passport, o como crear tu propio servidor OAuth 2

laravel 16 de nov. de 2016

Laravel 5.3 vino cargado de excelentes nuevas features, entre las cuales están:

Los primeros tres ya los hemos cubierto en otros posts de este mismo blog, y hoy paso a traerles un nuevo integrante, Laravel Passport.

Qué es Laravel Passport?

Passport es un paquete oficial de Laravel para integrar fácilmente un servidor OAuth 2 a tu aplicación de Laravel.

Tradicionalmente, instalar y configurar un paquete de OAuth 2, o implementarlo manualmente, ha sido un verdadero dolor de cabeza, pero por suerte, Taylor Otwell, creador de Laravel, armó para la versión 5.3, un paquete independiente que permite integrar rápidamente las funcionalidades de OAuth en nuestra aplicación.

Integrando Laravel Passport a nuestra aplicación

Para empezar, Passport es un paquete externo al core del framework, por lo que debemos requerirlo con Composer:

composer require laravel/passport

Una vez que terminó de instalarse, podemos agregarlo a nuestro archivo app.php como un ServiceProvider:

Laravel\Passport\PassportServiceProvider::class,

Ahora ya podremos realizar la migración, que contiene las tablas necesarias para generar clientes, tokens y demás.

php artisan migrate

Luego, tenemos que utilizar el siguiente comando para que Passport genere dos claves RSA que utilizará para encriptar nuestros tokens, y además creará dos clientes nuevos, uno para Personal Access Tokens y otro para Password Grants.

php artisan passport:install

Si vamos a crear tokens para aplicaciones propias (first-party), hasta aquí está bien, pero si queremos realizar algo parecido a Github, donde nuestros usuarios pueden registrar aplicaciones y que esas aplicaciones se conecten con la nuestra, necesitamos generar clientes nuevos asociados con esos usuarios.

Para que los usuarios de tu aplicación puedan solicitar tokens, tienes que agregarle el Trait HasApiTokens al Model para que quede así:

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

Después, tenemos que agregar a nuestro AuthServiceProvider el siguiente método para registrar las rutas de Passport:

    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }

Por último, tenemos que determinar en nuestro archivo session.php que utilizaremos el driver de Passport para las sesiones de nuestro API:

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],

Con eso ya queda configurado nuestro servidor para recibir peticiones de acceso con OAuth y entregar tokens de acceso.

Passport además propone una implementación frontend en Vue.js con componentes que permiten visualizar, consumir y generar clientes OAuth.
Puede utilizarse o pueden crear sus propias implementaciones que choquen contra el backend.

Muy lindo todo, pero para qué?

Ahora que tenemos integrado nuestro servidor OAuth en nuestra aplicación, que conseguimos?

  • Permitimos a otras aplicaciones que se integren la nuestra de forma segura.

  • Podemos desarrollar aplicaciones nuestras que se integren con nuestra versión actual, manteniendo un mismo punto de acceso (nuestro API) para todas, y que manejen de forma sencilla y segura la autenticación.

Un saludo y espero que les haya resultado de utilidad!

Etiquetas

¡No dejes que nos quedemos dormidos 😴, invitanos un cafecito!

Invitame un café en cafecito.app
¡Genial! Te has suscrito con éxito.
¡Genial! Ahora, completa el checkout para tener acceso completo.
¡Bienvenido de nuevo! Has iniciado sesión con éxito.
Éxito! Su cuenta está totalmente activada, ahora tienes acceso a todo el contenido.