> Manuales > Manual del desarrollo de API con Laravel

En qué consiste Laravel Sanctum. Cuáles son sus alternativas de trabajo, basadas en sesiones o en tokens de APIs. Cómo instalar Sanctum.

Qué es Laravel Sanctum

En este artículo dedicado del Manual de desarrollo de API con Laravel, vamos a ofrecer una introducción a Laravel Sanctum y veremos cuáles son los primeros pasos para la instalación en un proyecto Laravel.

Qué es Laravel Sanctum

Comenzamos explicando qué es Laravel Sanctum, para los desarrolladores que no sepan encajar exactamente este producto dentro del ecosistema Laravel.

Laravel Sanctum es una capa de autenticación para una aplicación basada en API desarrollada bajo el framework Laravel. Sirve para proyectos web SPA así como proyectos de aplicaciones móviles, en los que se realiza la autorización por medio de tokens. Mediante Sanctum es posible generar múltiples token por usuario para autenticarse en los distintos frontales y los éstos pueden relacionarse con distintos niveles de permisos o ámbitos de acciones, llamados frecuentemente scopes.

Con Sanctum tenemos dos tipos de modelo de trabajo:

Autenticación para una SPA

Para un proyecto de SPA (Single Page Application) es posible usar Sanctum de una manera sencilla para la gestión de la autenticación por medio de sesiones basadas en Cookies, como en las aplicaciones web en general. Esto permite eliminar las complejidades y particularidades del trabajo con tokens de API, permitiendo que el trabajo del desarrollo de un backend se realice de manera idéntica a como lo realizarías en una aplicación Laravel tradicional.

Este modelo de trabajo solamente se puede usar desde el medio web, cuando el cliente es el navegador, ya que es quien tiene la posibilidad de trabajar con sesiones basadas en cookies. No obstante, aunque se trabaje por medio de sesiones y cookies, esto no implica que los proyectos deban residir en el mismo repositorio. Puedes tener perfectamente dos proyectos separados, uno del backend con Laravel para la implementación del API y otro proyecto frontend totalmente independiente, en el que podríamos usar cualquier tecnología o framework frontend, del estilo de Nuxt, Next, Angular, Web Components, o cualquier otra alternativa de desarrollo basada en Javascript.

Igualmente, aunque estés desarrollando una SPA, nada te obliga a autenticarte por medio de sesiones, ya que Laravel Sanctum también implementa el modo de trabajo basado en tokens.

Autenticación basada en tokens

Con Laravel Sanctum puedes trabajar también usando tokens de API, de una manera similar a como trabajan en las aplicaciones de GitHub, donde existe un Personal Access Token que el usuario puede generar y le permite autenticarse en su cuenta desde otras aplicaciones.

Los token se gestionan por medio de Sanctum y permiten trabajar sin la necesidad de usar sesiones, que es la manera más habitual de trabajo en las API, pero sin llegar a la complejidad de la capa de autenticación basada en OAuth.

Los token generados desde Sanctum pueden configurarse con un tiempo de validez, que se puede establecer si se desea de manera amplia (por ejemplo años). El usuario puede por supuesto revocar sus token en el momento que considere necesario.

Este modelo de autorización es el que se debería usar en aplicaciones móviles, aunque nada impide usarlo también en aplicaciones web tipo SPA.

Tal como está desarrollado Laravel Sanctum el trabajo con tokens es muy sencillo, incluso más sencillo que el trabajo mediante sesiones. Solo que mediante sesiones tienes la posibilidad de usar Laravel Fortify y con los tokens tendrías que realizar tú mismo los endpoints para el registro de usuarios y la autenticación.

En las aplicaciones frontend generalmente al hacer login o registrar usuarios recibiremos los tokens generados en el backend y los usaremos en cada una de las solicitudes al servidor para poder verificar la identidad del usuario que está realizando la solicitud.

¿Qué escoger, autenticación basada en sesiones o autenticación basada en tokens?

Para decidir uno de los dos modelos de autorización tenemos que analizar qué tipo de aplicación se está desarrollando y la cantidad de tráfico que vamos a recibir, lo que impacta en sus necesidades de escalabilidad.

Como primera evaluación deberíamos saber que si necesitamos implementar un frontal para una aplicación móvil sería necesario trabajar con tokens de API, ya que no sería posible autenticación por medio de sesiones.

Si estamos desarrollando un frontal para web, en una ASP o PWA, podríamos escoger entre la alternativa basada en tokens o la basada en sesiones. Siempre sabiendo que trabajar con sesiones tiene la ventaja de ser más natural y evitar toda la gestión de creación de los token.

En cuanto a la escalabilidad, si bien es cierto que el modelo basado en token resulta más sencillo de escalar en un principio y es más versátil, no es un inconveniente usar APIs basados en sesiones en la mayoría de las aplicaciones web. Obviamente, si estuvieras desarrollando un servicio como Twitter o GitHub igual sería mejor optar por los token de una vez, pero es una situación extrema que no ocurre en la generalidad de los proyectos que se desarrollan al día a día. Paralelamente, no existe problema en gestionar en el API autorizaciones basadas en sesiones y basadas en token al mismo tiempo y esto lo hace Sanctum por nosotros de manera predeterminada.

Otra cosa a tener en cuenta y a favor de la autenticación basada en sesiones es que es posible beneficiarse de algunas capas de seguridad implementadas en el framework Laravel como CSRF y una protección extra contra ataques por XSS.

Instalación de Laravel Sanctum

Actualizado: Laravel Sanctum hay que instalarlo para poder usarlo en las versiones nuevas de Laravel. Si instalas un starter kit de Laravel se instalará, pero si no lo haces tendrás que instalar Sactum manualmente con el comando siguiente.

composer require laravel/sanctum

Una vez instalado debes correr el comando de artisan necesario para publicar el archivo de configuración de Sanctum, config/sanctum.php.

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Ese comando también creará la migración necesaria para poder gestionar los tokens de API.

Luego tienes que lanzar el comando que ejecuta las migraciones, para crear la correspondiente tabla de los tokens de api, y otras migraciones que quizás no se hayan ejecutado, si es que estás iniciando un proyecto Laravel en estos momentos.

php artisan migrate

El texto original del artículo decía así: En las versiones más recientes de Laravel, Sanctum ya se encuentra instalado de manera predeterminada, por lo que no necesitamos hacer nada en especial en este punto. Puedes comprobarlo en el archivo composer.json de tu instalación de Laravel.

De todos modos podemos consultar la documentación de Sanctum para la versión de Laravel que estés utilizando, para encontrar los pasos para la instalación si fuera necesario realizar alguno.

En el siguiente artículo aprenderemos cómo configurar Laravel Sanctum y dar los primeros pasos para el desarrollo de la capa de autenticación basada en sesiones para un proyecto de API.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual