将 sha512 编码器与 symfony2 in_memory 安全提供程序一起使用

Rob*_*Rob 2 security passwords encoding sha512 symfony

我正在尝试配置我的 symfony2 应用程序以将 sha512 密码编码器与 in_memory 安全提供程序一起使用,但我无法让它工作。我在登录时收到臭名昭著的“凭据错误”错误。与这里的大多数问题不同,我不想从任何数据库中获取用户。我不想使用 FOSUserBundle。我想要的只是用 sha512 哈希替换我的 security.yml 中的明文密码。

根据http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password这应该就像设置编码器并用哈希替换明文密码一样简单,这样就我试图做的:

安全.yml:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: sha512

    providers:
        in_memory:
            memory:
                users:
                    admin: { password: $6$randomsalt$mbd3sS15ibE.W7hkLqfQ0LNEQsUod7BOUD67g/oIb8uhqGfyAzaga3vgGaRJZn67VdHHfn.tnkKY9ffDVXw3C., roles: [ 'ROLE_ADMIN' ] }
Run Code Online (Sandbox Code Playgroud)

密码是“admin”,盐是“randomsalt”,散列是由 mkpasswd 生成的:

mkpasswd -m sha-512 admin randomsalt
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?symfony2 是否希望散列采用其他格式?

编辑:我也尝试过的事情:

  • 使用 PHP 通过 PHP 生成哈希 crypt($password, "$6$".$salt)
  • encode_as_base64在安全编码器上切换真/假
  • 指定要使用的迭代次数(默认 5000)

结果是一样的:“坏凭据”。

Rob*_*Rob 5

经过多次反复试验,我能够开始工作的唯一配置是最简单的情况:

security:
    encoders:
        Symfony\Component\Security\Core\User\User:
            algorithm: sha512
            encode_as_base64: false
            iterations: 1

    providers:
        in_memory:
            memory:
                users:
                    admin: { password: c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec, roles: [ 'ROLE_ADMIN' ] }
Run Code Online (Sandbox Code Playgroud)

这是由echo -n admin | sha512sum各种在线哈希生成器中的任何一个获取的或从任何一个未加盐密码的单个 sha512 迭代。我无法让它与 PHP 的标准 crypt() 或 password_hash() 函数创建的任何东西一起使用。文档没有指定格式。我的应用程序不以任何其他方式处理用户或密码,我宁愿希望使用 symfony 的安全组件而无需编写自定义用户实体或密码编码器。对于看似非常基本的事情,这正在变成大量的工作。