¿Cómo proteger una API mediante inicio de sesión y autenticación?
Proteger una API es crucial para garantizar que solo los usuarios autorizados accedan a los datos. En esta clase, seguiremos un enfoque detallado para permitir que los usuarios se autentiquen y obtengan un token, asegurando así el acceso a nuestras API privadas. Vamos a usar herramientas específicas y configuraciones para asegurarnos de que solo los usuarios autenticados puedan consumir la información.
¿Qué pasos iniciales seguimos en el editor?
Primero, abrimos nuestro terminal en el editor. Desde aquí, realizamos la instalación de un componente que nos permitirá configurar la autenticación adecuada para la API. Si hubiéramos tenido instalado JetStream desde el inicio, muchas de estas configuraciones serían automáticas, pero aquí mostramos el proceso paso a paso. Este enfoque es esencial para comprender cómo se configuran estas protecciones de manera manual.
¿Cómo configuramos las rutas para la autenticación?
El siguiente paso implica proteger nuestras rutas en el archivo de configuración. Específicamente, trabajaremos con las versiones uno y dos de nuestra API al aplicar middleware para autenticación. El middleware se configura de la siguiente manera:
$middleware='auth:sanctum';// Ejemplo de cómo se define el middleware para autenticación
La instalación que estamos llevando a cabo trae muchas configuraciones predeterminadas, y utilizaremos esto para definir nuestras rutas protegidas.
¿Cómo probamos la configuración usando Postman?
Una vez que la instalación termina, ejecutamos una migración necesaria con el comando de Artisan:
php artisan migrate
Este paso asegura que las tablas necesarias para manejar tokens se creen en la base de datos. Al intentar acceder a un recurso protegido usando Postman, es probable que inicialmente veamos un error de redirección hacia LogIn.
Esto sucede porque la solicitud, por defecto, se interpreta como hecha desde un navegador web. Para evitar esto, agregamos un encabezado clave: Accept, con el valor application/json:
Accept: application/json
Esto indica al servidor que la solicitud es hecha por un cliente API y no por un navegador.
¿Qué errores podemos esperar encontrar y cómo los solucionamos?
Al enviar una solicitud sin el encabezado adecuado, recibimos un error 401, indicando que no estamos autenticados. Este código de estado es correcto y esperado, ya que nuestras rutas están bien protegidas.
Este proceso subraya la importancia de comprender la configuración de encabezados al realizar solicitudes a una API. Si no te has autenticado, el sistema impedirá el acceso a los datos. Solo necesitas agregar una línea para asegurar que las solicitudes se manejen correctamente como API.
Recuerda siempre realizar estos ejercicios y asegurarte de que cada parte esté bien configurada antes de avanzar a tareas más complejas como la implementación de sistemas de login. ¡A seguir aprendiendo!
Laravel Sanctum proporciona un sistema de autenticación para SPA (aplicaciones de una sola página), aplicaciones móviles y API simples basadas en tokens. Sanctum permite que cada usuario de su aplicación genere múltiples tokens API para su cuenta. A estos tokens se les pueden otorgar habilidades / alcances que especifican qué acciones pueden realizar los tokens.
Fuente:
https://laravel.com/docs/8.x/sanctum#introduction
Muchas gracias!
Ohhh! 🙀, precisamente estaba en busca de alguna herramienta que me ayudara con eso en una API, que gran aporte enserio, muchas gracias!.
Yo no sé ustedes pero a mi me encanta el logo de Laravel Sacntum, jaja
.
Este sistema se basa en autenticación por tokens, es perfecto para hacer uso de API's, ya no tienes que reinventar la rueda!
.
Estoy con laravel 10 y si instalas Breeze ya lo trae
Y como menciono el profe, tambien con jetstream que es un mucho mas completo que Breeze
Continuo: El sanctum xd
Pd: ¿a alguien mas le gusta la palabra "Sanctum"?
Tengo un problema luego de realizar la instalación y seguir el curso con la introducción del middleware en el routes y correr en postman me dio estos errores no puedo avanzar quisiera me pudieran ayudar
Deprecated:Return type ofIlluminate\Container\Container::offsetExists($key) should either be compatible withArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice inC:\laragon\www\api\vendor\laravel\framework\src\Illuminate\Container\Container.php on line 1341Deprecated:Return type ofIlluminate\Container\Container::offsetGet($key) should either be compatible withArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice inC:\laragon\www\api\vendor\laravel\framework\src\Illuminate\Container\Container.php on line 1352
Estoy ejecutando la linea de comando >>composer require laravel/sanctum, estoy usando laravel 8, pero se sale el siguente error:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires laravel/sanctum ^3.2 -> satisfiable by laravel/sanctum[v3.2.0, v3.2.1, 3.x-dev].
- laravel/sanctum[v3.2.0, ..., 3.x-dev] require illuminate/console ^9.21|^10.0 -> found illuminate/console[v9.21.0, ..., 9.x-dev, v10.0.0, ..., 10.x-dev] but these were not loaded, likely because it conflicts with another require.
Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
You can also try re-running composer require with an explicit version constraint, e.g. "composer require laravel/sanctum:*" to figure out if any version is installable, or "composer require laravel/sanctum:^2.1" if you know which you need.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
tengo una duda... estoy desarrollando el front end de un proyecto pero solo se consume una API, no hay base de datos en absoluto, todo ha ido bien pero estoy atorado en el login, no encuentro una forma para realizar el logeo sin el uso de una base de datos, hay alguna forma de hacerlo?
todas las apis deben ser privadas?
No necesariamente todo depende de ti si quieres proteger la información o hacerla pública. si es pública cualquiera podrá consumir la información.
Una pregunta con respecto a Sanctum, no deseo migrar la tabla a mi base de datos y en la documentacion encontre que puedo configurar este metodo Sanctum::ignoreMigrations, podria ayudarme como hacer eso, espero su ayuda, gracias.
Hola,
Solo debes publicarlas con el siguiente código en tu terminal: