Использование брандмауэров предварительной аутентификации

Использование брандмауэров предварительной аутентификации

Многие модули аутентификации уже предоставлены некоторыми веб-серверами, включая Apache. Эти модули обычно устанавливают некоторые переменные окружения, которые могут быть использованы для определения того, какой пользователь получает доступ к вашему приложению. В исходном состоянии, Symfony поддерживает большинство механизмов аутентификации. Эти запросы называются запросами предварительной аутентификации, так как пользователь уже аутентифицирован, когда достигает вашего приложения.

Caution

Имитация пользователя не совместима с брандмауэрами предварительной аутентификации, так как имитация требует, чтобы состояние аутентификации обрабатывалось серверской стороной, а информация о предварительной аутентификации (SSL_CLIENT_S_DN_Email, REMOTE_USER и др.) отправляется по каждому запросу.

Аутентификация сертификата клиента X.509

При использовании сертификатов клиента, ващ веб-сервер самостоятельно проводит весь процесс аутентификации. Например, с Apache, вы бы использовали директиву SSLVerifyClient Require.

Включите аутентификауцию x509 для конкретного брандмауэера в конфигурации безопасности:

  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # app/config/security.yml
    security:
        # ...
    
        firewalls:
            secured_area:
                pattern: ^/
                x509:
                    provider: your_user_provider
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    <!-- app/config/security.xml -->
    <?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">
    
        <config>
            <!-- ... -->
    
            <firewall name="secured_area" pattern="^/">
                <x509 provider="your_user_provider" />
            </firewall>
        </config>
    </srv:container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    // app/config/security.php
    $container->loadFromExtension('security', array(
        // ...
    
        'firewalls' => array(
            'secured_area' => array(
                'pattern' => '^/',
                'x509'    => array(
                    'provider' => 'your_user_provider',
                ),
            ),
        ),
    ));
    

По умолчанию, брандмауэр предоставляет переменную SSL_CLIENT_S_DN_Email поставщику пользователя, и устанавливает SSL_CLIENT_S_DN в качестве аккредитации в PreAuthenticatedToken. Вы можете переопределить это, соответственно установив ключи user и credentials в конфигурации брандмауэра x509.

Note

Поставщик аутентификации будет информировать поставщика пользователя только об имени пользователя, который сделал запрос. Вам нужно будет создать (или использовать) "поставщика пользователя", на который ссылается параметр конфигурации provider (your_user_provider - в примере конфигурации). Этот провайдер превратит имя пользователя в объект Пользователя на ваш выбор. Чтобы узнать больше о создании или конфигурации поставщика пользователя, смотрите:

Аутентификация, основанная на REMOTE_USER

Многие модули аутентификации, как auth_kerb в Apache, предоставляют имена пользователей, используя переменную окружения REMOTE_USER. Приложение может доверять этой переменной, так как аутентификация произошла до того, как до него дошёл запрос.

Чтобы сконфигурироваь Symfony, используя переменную окружения REMOTE_USER, просто включите соответствующий брандмауэр в вашей конфигурации безопасности:

  • YAML
    1
    2
    3
    4
    5
    6
    7
    # app/config/security.yml
    security:
        firewalls:
            secured_area:
                pattern: ^/
                remote_user:
                    provider: your_user_provider
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    <!-- app/config/security.xml -->
    <?xml version="1.0" ?>
    <srv:container xmlns="http://symfony.com/schema/dic/security"
        xmlns:srv="http://symfony.com/schema/dic/services">
    
        <config>
            <firewall name="secured_area" pattern="^/">
                <remote-user provider="your_user_provider"/>
            </firewall>
        </config>
    </srv:container>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    // app/config/security.php
    $container->loadFromExtension('security', array(
        'firewalls' => array(
            'secured_area' => array(
                'pattern'     => '^/',
                'remote_user' => array(
                    'provider' => 'your_user_provider',
                ),
            ),
        ),
    ));
    

После этого брандмауэр предоставит переменную окружения REMOTE_USER вашему поставщику пользователя. Вы можете изменить имя переменной, установив ключ user в конфигурации брандмауэера remote_user.

Note

Так же, как и для аутентификации X509, вам нужно будет сконфигурировать "поставщика пользователя". Смотрите предыдущую запись, чтобы узнать больше.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.