Symfony 2 получает анонимный токен после базовой аутентификации
У меня есть приложение 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
В вашей среде разработчиков, вероятно, работает PHP как mod_php, в то время как ваш промежуточный сервер, вероятно, работает как FastCGI. По умолчанию переменные сервера PHP_AUTH_USER
и PHP_AUTH_PW
не заполняются в этом контексте при аутентификации через HTTP basic, и это то, что Symfony использует для создания контекста безопасности и проверки вашего пароля.
Если вы используете это как FCGI на Apache, вы можете это исправить. Один из них - заставить FastCGI передать заголовок авторизации, который он обычно подавляет. Добавьте это в определение сайта Apache рядом с другими параметрами конфигурации FastCGI:
FcgidPassHeader Authorization
В других приложениях вам также может понадобиться в большей степени обходиться (как описано здесь), но для Symfony достаточно просто передать заголовок.