Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Cómo hacer la autenticación de usuario con el componente de seguridad de Symfony

by
Difficulty:IntermediateLength:MediumLanguages:

Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)

En este artículo, aprenderá a configurar la autenticación de usuario en PHP utilizando el componente Symfony Security. Además de la autenticación, le mostraré cómo usar su autorización basada en roles, que puede ampliar de acuerdo con sus necesidades.

El componente de seguridad de Symfony

El componente de seguridad de Symfony le permite configurar funciones de seguridad como la autenticación, la autorización basada en roles, los tokens CSRF y mucho más fácilmente. De hecho, está dividido en cuatro subcomponentes, que puede elegir de acuerdo con sus necesidades.

El componente de seguridad tiene los siguientes subcomponentes:

  • symfony/security-core
  • symfony/security-http
  • symfony/security-csrf
  • symfony/security-acl

En este artículo, vamos a explorar la función de autenticación proporcionada por el componente symfony / security-core.

Como de costumbre, comenzaremos con las instrucciones de instalación y configuración, y luego exploraremos algunos ejemplos del mundo real para demostrar los conceptos clave.

Instalacion y configuracion

En esta sección, vamos a instalar el componente de seguridad de Symfony. Supongo que ya ha instalado Composer en su sistema; lo necesitaremos para instalar el componente de seguridad disponible en Packagist.

Así que adelante e instale el componente de Seguridad usando el siguiente comando.

Vamos a cargar usuarios de la base de datos MySQL en nuestro ejemplo, por lo que también necesitaremos una capa de abstracción de la base de datos. Instalemos una de las capas de abstracción de base de datos más populares: Doctrine DBAL.

Eso debería haber creado el archivo composer.json, que debería verse así:

Modifiquemos el archivo composer.json para que se vea como el siguiente.

Como hemos agregado una nueva entrada de classmap, continuemos y actualicemos el autocargador del compositor ejecutando el siguiente comando.

Ahora puede usar el espacio de nombres de Sfauth para autocargar clases en el directorio src.

Esa es la parte de la instalación, pero ¿cómo se supone que debes usarla? De hecho, solo se trata de incluir el archivo autoload.php creado por Composer en su aplicación, como se muestra en el siguiente fragmento.

Un ejemplo del mundo real

En primer lugar, veamos el flujo de autenticación habitual proporcionado por el componente Symfony Security.

  • Lo primero es recuperar las credenciales del usuario y crear un token no autenticado.
  • A continuación, pasaremos un token no autenticado al administrador de autenticación para su validación.
  • El administrador de autenticación puede contener diferentes proveedores de autenticación, y uno de ellos se utilizará para autenticar la solicitud del usuario actual. La lógica de cómo se autentica el usuario se define en el proveedor de autenticación.
  • El proveedor de autenticación contacta al proveedor del usuario para recuperar al usuario. Es responsabilidad del proveedor del usuario cargar usuarios desde el back-end respectivo.
  • El proveedor de usuario intenta cargar al usuario utilizando las credenciales proporcionadas por el proveedor de autenticación. En la mayoría de los casos, el proveedor del usuario devuelve el objeto del usuario que implementa la interfaz UserInterface.
  • Si se encuentra el usuario, el proveedor de autenticación devuelve un token no autenticado y puede almacenar este token para las solicitudes posteriores.

En nuestro ejemplo, vamos a hacer coincidir las credenciales del usuario con la base de datos MySQL, por lo tanto, tendremos que crear el proveedor del usuario de la base de datos. También crearemos el proveedor de autenticación de base de datos que maneja la lógica de autenticación. Y finalmente, crearemos la clase User, que implementa la interfaz UserInterface.

La clase de usuario

En esta sección, crearemos la clase de usuario que representa la entidad de usuario en el proceso de autenticación.

Continúa y crea el archivo src / User / User.php con los siguientes contenidos.

Lo importante es que la clase User debe implementar la interfaz Symfony Security UserInterface. Aparte de eso, no hay nada fuera de lo común aquí.

La clase de proveedor de base de datos

Es responsabilidad del proveedor del usuario cargar usuarios desde el back-end. En esta sección, crearemos el proveedor de usuario de la base de datos, que carga al usuario desde la base de datos MySQL.

Vamos a crear el archivo src / User / DatabaseUserProvider.php con los siguientes contenidos.

El proveedor del usuario debe implementar la interfaz UserProviderInterface. Estamos utilizando la doctrina DBAL para realizar las operaciones relacionadas con la base de datos. Como hemos implementado la interfaz UserProviderInterface, debemos implementar los métodos loadUserByUsername, refreshUser y supportsClass.

El método loadUserByUsername debe cargar al usuario por el nombre de usuario, y eso se hace en el método getUser. Si se encuentra el usuario, devolvemos el objeto Sfauth \ User \ User correspondiente, que implementa la interfaz UserInterface.

Por otro lado, el método refreshUser actualiza el objeto User suministrado obteniendo la última información de la base de datos.

Y finalmente, el método supportsClass comprueba si el proveedor DatabaseUserProvider es compatible con la clase de usuario suministrada.

La clase de proveedor de autenticación de base de datos

Finalmente, debemos implementar el proveedor de autenticación de usuario, que define la lógica de autenticación: cómo se autentica un usuario. En nuestro caso, tenemos que hacer coincidir las credenciales del usuario con la base de datos MySQL, y por lo tanto tenemos que definir la lógica de autenticación en consecuencia.

Continúa y crea el archivo src / User / DatabaseAuthenticationProvider.php con los siguientes contenidos.

El proveedor de autenticación DatabaseAuthenticationProvider amplía la clase abstracta UserAuthenticationProvider. Por lo tanto, debemos implementar los métodos abstractos retrieveUser y checkAuthentication.

El trabajo del método retrieveUser es cargar al usuario desde el proveedor de usuario correspondiente. En nuestro caso, utilizará el proveedor de usuario DatabaseUserProvider para cargar al usuario desde la base de datos MySQL.

Por otro lado, el método checkAuthentication realiza las comprobaciones necesarias para autenticar al usuario actual. Tenga en cuenta que he utilizado el método MD5 para el cifrado de contraseñas. Por supuesto, debe usar métodos de cifrado más seguros para almacenar las contraseñas de los usuarios.

Cómo funciona en conjunto

Hasta ahora, hemos creado todos los elementos necesarios para la autenticación. En esta sección, veremos cómo armar todo para configurar la funcionalidad de autenticación.

Continúe y cree el archivo db_auth.php y rellene con los siguientes contenidos.

Recuerde el flujo de autenticación que se discutió al principio de este artículo: el código anterior refleja esa secuencia.

Lo primero fue recuperar las credenciales del usuario y crear un token no autenticado.

A continuación, pasamos ese token al administrador de autenticación para su validación.

Cuando se llama al método de autenticación, ocurren muchas cosas detrás de escena.

En primer lugar, el administrador de autenticación selecciona un proveedor de autenticación apropiado. En nuestro caso, es el proveedor de autenticación DatabaseAuthenticationProvider, que se seleccionará para la autenticación.

A continuación, recupera al usuario por el nombre de usuario del proveedor de usuario DatabaseUserProvider. Finalmente, el método checkAuthentication realiza las comprobaciones necesarias para autenticar la solicitud del usuario actual.

Si desea probar el script db_auth.php, deberá crear la tabla sf_users en su base de datos MySQL.

Continúa y ejecuta el script db_auth.php para ver cómo funciona. Tras completar con éxito, debe recibir un token autenticado, como se muestra en el siguiente fragmento.

Una vez que el usuario está autenticado, puede almacenar el token autenticado en la sesión para las solicitudes posteriores.

¡Y con eso, hemos completado nuestra demostración de autenticación simple!

Conclusión

Hoy, miramos el componente Symfony Security, que le permite integrar funciones de seguridad en sus aplicaciones PHP. Específicamente, hablamos sobre la función de autenticación proporcionada por el subcomponente symfony / security-core, y le mostré un ejemplo de cómo esta funcionalidad puede implementarse en su propia aplicación.

¡Siéntete libre de publicar tus pensamientos usando el feed a continuación!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.