Hace poco escribí un tutorial sobre easyadmin de symfony y ahora os quiero escribir sobre como proteger el admin con contraseña en symfony sin tener que hacer un sistema complicado de autenticación. En el ejemplo que voy a poner es una autenticación http básica.
Para realizar esta protección, voy a poner un ejemplo sencillo, aunque hay otras maneras:
Abrimos el fichero security.yaml que se encuentra en la carpeta config.
security:
encoders:
Symfony\Component\Security\Core\User\User: bcrypt
providers:
chain_provider:
chain:
providers: [in_memory]
in_memory:
memory:
users:
administrador:
password:
roles: 'ROLE_ADMIN'
firewalls:
secured_area:
pattern: ^/admin
http_basic:
realm: 'Mi web admin'
provider: in_memory
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
En el código podemos ver, no está explicado en orden sino por importancia, paso a paso para entenderlo:
- access_control: La web de la página que queremos proteger. Este caso es admin y el rol es ROLE_ADMIN, se pueden gestionar varias páginas y roles.
- providers: En esta sección se le indica a symfony donde "buscar" a los usuarios. En este caso está puesto que sea por memoria, es decir, que los usuarios los buscarán en este fichero y se le indica poniendo in_memory, donde sindica los usuarios, en este caso el usuario es "administrador", su clave y su rol.
- encoders: Se indica la codificacón de las contraseñas, puede ser plain_text, auto, bcrypt, como en el ejemplo y otras.
- generar password: Para generar una clave desde symfony basta con ejecutar el comando php bin/console security:encode-password tu-password y devolverá la clave codificada con lo la encriptación definida en encoders encoder:. Copiamos la clave generada y la copiamos en la sección password del usuario generado, en el ejemplo donde pone
.
Este es un ejemplo bastante sencillo. Y se pueden usar usuarios creados en base de datos y otras opciones.
Esta protección se puede hacer desde apache: Como proteger directorios y archivos con apache