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 классу будет передан хешированный не открытый текстовый пароль, поэтому он никогда не сможет сгенерировать правильный хеш для сравнения.

Другие вопросы по тегам