【问题标题】:Symfony 3 custom user provider using Bcrypt使用 Bcrypt 的 Symfony 3 自定义用户提供程序
【发布时间】:2017-04-01 16:19:23
【问题描述】:

在阅读https://symfony.com/doc/current/security/custom_provider.html#create-a-user-class/ 时,我看到的所有示例都为User 类实现了Symfony\Component\Security\Core\User\UserInterface。这个接口定义了盐场的方法——但我想使用 Bcrypt 进行哈希算法。

在我的app/config/security.yml 文件中,我有:

encoders:
    AppBundle\Security\User\WebserviceUser:
        algorithm: bcrypt
        cost: 12

链接的文档说:

如果 getSalt() 没有返回任何内容,那么提交的密码只是使用您在 security.yml 中指定的算法进行编码。如果指定了盐,则创建以下值,然后进行散列...

这是否意味着如果我指定使用 Bcrypt,那么我不需要用户数据库表中的盐字段(因为使用 Bcrypt 散列时盐与密码的其余部分在同一个字符串中) ?

如果是这种情况,那么我猜我可以让 getSalt() 方法的主体为空,这样就不会指定盐,并且会使用 security.yml 中的算法。

我的上述假设是否正确?如果不是,我如何使用 bcrypt 来实现用户提供程序来散列密码?

我正在使用 Symfony 3.1.6

【问题讨论】:

    标签: php symfony bcrypt symfony-security symfony-3.1


    【解决方案1】:

    Creating your First User中所述:

    您需要使用 Salt 属性吗?

    如果您使用 bcrypt,则不会。否则,是的。所有密码都必须经过哈希处理 加盐,但 bcrypt 在内部执行此操作。由于本教程确实 使用bcrypt,用户中的getSalt()方法可以只是return null(它 未使用)。如果您使用不同的算法,则需要取消注释 用户实体中的盐线并添加一个持久的盐属性。

    如果你想使用 Bcrypt,只需在 getSalt() 方法中使用 return null

    【讨论】:

    • 这对我很有帮助。我正在创建一个自定义 UserProvider 并定义了我自己的 User 类,因为我使用的是 Doctrine 不支持的数据库。两者似乎都希望我有一个与我的哈希密码分开的盐。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多