Symfony2 + FOSUserBundle : http_basic authentication works, http_digest 失败

标签 symfony basic-authentication http-digest

我正在使用 FOSUserBundle 配置一个 Symfony2 应用程序以使用 http_digest验证。这是 Symfony 2.1.0-BETA2。

在 security.yml 中,我只是简单地切换出 http_basichttp_digest并添加所需的 key属性(property)。其他一切都保持不变。

相关配置有效:

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_basichttp_digest .更改 key 的值属性(property)似乎没有什么区别。

使用 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 中的错误引起的。

最佳答案

简而言之,HTTP 摘要身份验证的工作原理是比较从用户名、领域、密码以及各种废话和避免重播值等值计算出的哈希值。

客户端和服务器端都需要明文密码才能生成相同的哈希值。
FOSUserBundle盐和哈希密码。

Symfony\Component\Security\Http\Firewall\DigestAuthenticationListener 中生成的服务器端哈希类将传递一个散列的非明文密码,因此永远无法生成正确的散列进行比较。

关于Symfony2 + FOSUserBundle : http_basic authentication works, http_digest 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471338/

相关文章:

symfony2 自定义用户提供程序打印 "Bad credentials"

java - 使用 HtmlUnit WebClient 为每个请求传递基本身份验证凭据

symfony - 需要Symfony2 http_digest防火墙配置示例

java - 如何为嵌入式 jetty/ Spring 安全启用 HTTP 摘要?

java - Groovy 摘要身份验证

php - 将行分组为一行的学说和 SUM 数量不起作用

symfony - 如何覆盖 yaml 中父服务的第一个参数?

php - Symfony 2 调试工具栏未显示,破坏了开发环境中的 HTML

c# - 基于 token 的身份验证的签名/加密如何用于无状态服务器(REST)

mysql - 开启 Apache Basic Auth 导致服务器连接失败