4

認証を使用するために FOSUserBundle を使用して Symfony2 アプリケーションを構成しています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_digestkeyプロパティの値を変更しても、違いはないように見えます。

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 のバグなのかを確認したいと思います。

4

1 に答える 1

6

HTTP ダイジェスト認証は、要するに、ユーザー名、レルム、パスワード、およびさまざまな nonse 値と replay-avoidance 値を含む値から計算されたハッシュを比較することによって機能します。

同じハッシュを生成するには、クライアント側とサーバー側の両方で平文のパスワードが必要です。

FOSUserBundleパスワードをソルトしてハッシュします。

クラス内で生成されたサーバー側のハッシュにはSymfony\Component\Security\Http\Firewall\DigestAuthenticationListener、平文ではなくハッシュ化されたパスワードが渡されるため、比較のために正しいハッシュを生成することはできません。

于 2012-07-13T14:21:56.140 に答える