Symfony 2 получает анонимный токен после базовой аутентификации - PullRequest
11 голосов
/ 21 июля 2011

У меня есть приложение Symfony 2, использующее базовую аутентификацию in_memory (как описано в документации по безопасности ).Логин отлично работает в наших средах разработки.Но на промежуточном сервере базовая аутентификация, по-видимому, не обеспечивает надлежащий токен, как видно из предоставленного таким образом файла журнала;таким образом, мы продолжаем получать всплывающее окно для входа снова и снова.

Наша конфигурация безопасности:

security:
    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/admin, roles: [ROLE_ADMIN]}

    providers:
        in_memory:
            users:
                admin: { password: admin, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

Это вывод журнала из (успешного) входа в среду разработки:

[2011-07-21 13:49:48] security.DEBUG: Read SecurityContext from the session [] []
[2011-07-21 13:49:48] security.DEBUG: Reloading user from user provider. [] []
[2011-07-21 13:49:48] security.DEBUG: Username "root" was reloaded from user provider. [] []

И это вывод журнала из логина промежуточной среды:

[2011-07-21 13:53:08] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2011-07-21 13:53:08] security.DEBUG: Access denied (user is not fully authenticated); redirecting to authentication entry point [] []
[2011-07-21 13:53:08] security.DEBUG: Calling Authentication entry point [] []

Заранее спасибо за помощь.

1 Ответ

9 голосов
/ 01 сентября 2011

Ваша среда разработки, вероятно, использует PHP как mod_php, в то время как ваш промежуточный сервер, вероятно, работает как FastCGI. По умолчанию серверные переменные PHP_AUTH_USER и PHP_AUTH_PW не заполняются в этом контексте, когда вы проходите аутентификацию через HTTP basic, и именно это Symfony использует для создания контекста безопасности и проверки вашего пароля.

Если вы используете это как FCGI на Apache, вы можете это исправить. Один из них - заставить FastCGI передавать заголовок авторизации, который он обычно подавляет. Добавьте это в определение сайта Apache рядом с другими параметрами конфигурации FastCGI:

FcgidPassHeader     Authorization

Для других приложений вам также может понадобиться в большей степени возиться (как описано здесь ), но для Symfony достаточно просто передать заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...