Symfony2 + FOSUserBundle: аутентификация http_basic работает, сбой http_digest
Я настраиваю приложение Symfony2, используя FOSUserBundle для использования http_digest
аутентификация. Это с Symfony 2.1.0-BETA2.
В security.yml я просто отключаюсь http_basic
за http_digest
и добавив необходимые key
имущество. Все остальное остается прежним.
Соответствующая конфигурация, которая работает:
firewalls:
main:
pattern: ^/
anonymous: ~
form_login: false
provider: fos_user_bundle
http_basic:
realm: "Example Realm"
Соответствующая конфигурация, которая не работает:
firewalls:
main:
pattern: ^/
anonymous: ~
form_login: false
provider: fos_user_bundle
http_digest:
realm: "Example Realm"
key: "%secret%"
Как видите, единственная разница заключается в выключении http_basic
за http_digest
, Изменение значения key
собственность, кажется, не имеет никакого значения.
При использовании провайдера in_memory, http_digest
работает просто отлично. Этот вопрос присутствует только при использовании fos_user_bundle
поставщик.
Работая, я имею в виду, что при использовании http_basic
, действительные учетные данные пользователя принимаются. Когда используешь http_digest
те же самые действительные данные пользователя не принимаются, и запрос HTTP-аутентификации браузера по умолчанию отображается повторно.
Между изменениями конфигурации безопасности я очищаю кеш dev и prod, очищаю кеш браузера и закрываю браузер.
Есть что-то критическое, что мне не хватает в конфигурации?
Обновить
Я зарегистрировал успешную попытку http_basic и неудачную попытку http_digest и просмотрел логи.
Оба журнала идентичны вплоть до того, где Doctrine регистрирует SQL-запрос, используемый для аутентификации.
После запроса аутентификации в журнале http_digest есть строки:
security.DEBUG: Expected response: '3460e5c31b09d4e8872650838a0c0f1a' but received: '5debe5d0028f65ae292ffdea2616ac19'; is AuthenticationDao returning clear text passwords? [] []
security.INFO: exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Incorrect response' in /home/jon/www/local.app.simplytestable.com/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php:105
Пароли, использующие FOSUserBundle, солятся и хэшируются.
Я хотел бы выяснить, возникает ли этот вопрос из-за неправильной конфигурации с моей стороны, или это ошибка в FOSUserBundle.
1 ответ
Короче говоря, дайджест-аутентификация HTTP работает путем сравнения хэшей, рассчитанных по значениям, включая имя пользователя, область, пароль и различные значения nonse и relay-предотвращение.
Открытый пароль требуется как на стороне клиента, так и на стороне сервера для создания одинаковых хэшей.
FOSUserBundle
соли и хеши пароли.
Серверный хеш, сгенерированный в пределах Symfony\Component\Security\Http\Firewall\DigestAuthenticationListener
классу будет передан хешированный не открытый текстовый пароль, поэтому он никогда не сможет сгенерировать правильный хеш для сравнения.