Ver índice de contenidos del libro

13.1.  Ejemplo básico: Autenticación HTTP

El componente de seguridad se configura mediante el archivo de configuración principal de la aplicación. De hecho, en la mayoría de las ocasiones lo único que tienes que hacer para proteger tu aplicación es configurar una pocas opciones de configuración. La siguiente configuración le dice a Symfony que proteja cualquier URL que coincida con la expresión regular /admin/* y pida a los usuarios sus credenciales mediante la autenticación básica de HTTP (es decir, mediante el típico cuadro de diálogo que muestran los navegadores para introducir el usuario y la contraseña):

# app/config/security.yml
security:
    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
        # Descomenta la siguiente línea para proteger también
        # la propia URL /admin
        # - { path: ^/admin$, roles: ROLE_ADMIN }

    providers:
        in_memory:
            memory:
                users:
                    ryan:  { password: ryanpass, roles: 'ROLE_USER' }
                    admin: { password: kitten, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
<?xml version="1.0" encoding="UTF-8"?>
 
<srv:container xmlns="http://symfony.com/schema/dic/security"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:srv="http://symfony.com/schema/dic/services"
    xsi:schemaLocation="http://symfony.com/schema/dic/services
        http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <!-- app/config/security.xml -->
 
    <config>
        <firewall name="secured_area" pattern="^/">
            <anonymous />
            <http-basic realm="Secured Demo Area" />
        </firewall>
 
        <access-control>
            <rule path="^/admin" role="ROLE_ADMIN" />
            <!-- Descomenta la siguiente línea para proteger también
                 la propia URL /admin -->
            <!-- <rule path="^/admin$" role="ROLE_ADMIN" /> -->
        </access-control>
 
        <provider name="in_memory">
            <memory>
                <user name="ryan" password="ryanpass" roles="ROLE_USER" />
                <user name="admin" password="kitten" roles="ROLE_ADMIN" />
            </memory>
        </provider>
 
        <encoder class="Symfony\Component\Security\Core\User\User"
            algorithm="plaintext" />
    </config>
</srv:container>
// app/config/security.php
$container->loadFromExtension('security', array(
    'firewalls' => array(
        'secured_area' => array(
            'pattern'    => '^/',
            'anonymous'  => array(),
            'http_basic' => array(
                'realm'  => 'Secured Demo Area',
            ),
        ),
    ),
    'access_control' => array(
        array('path' => '^/admin', 'role' => 'ROLE_ADMIN'),
        // Descomenta la siguiente línea para proteger también la
        // propia URL /admin
        // array('path' => '^/admin$', 'role' => 'ROLE_ADMIN'),
    ),
    'providers' => array(
        'in_memory' => array(
            'memory' => array(
                'users' => array(
                    'ryan'  => array(
                        'password' => 'ryanpass',
                        'roles'    => 'ROLE_USER'
                    ),
                    'admin' => array(
                        'password' => 'kitten',
                        'roles'    => 'ROLE_ADMIN'
                    ),
                ),
            ),
        ),
    ),
    'encoders' => array(
        'Symfony\Component\Security\Core\User\User' => 'plaintext',
    ),
));

Truco La distribución estándar de Symfony separa la configuración de seguridad en un archivo independiente llamado app/config/security.yml. Si no quieres utilizar ese archivo adicional, puedes poner la configuración de seguridad directamente en el archivo de configuración principal (app/config/config.yml).

El resultado final de esta configuración es un sistema de seguridad totalmente funcional y con las siguientes características:

  • Hay dos usuarios en el sistema (ryan y admin).
  • Los usuarios se autentican a través de la autenticación HTTP básica del navegador.
  • Cualquier URL que coincida con /admin/* está protegida, y sólo el usuario admin puede acceder a ellas.
  • El resto de URL que no coincidan con /admin/* son accesibles para todos los usuarios (y nunca se pide al usuario que se registre).

A continuación se explica el funcionamiento de la seguridad y como se aplica cada una de las partes de la configuración anterior..