如何迁移密码哈希

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何迁移密码哈希

为了保护密码,建议使用最新的哈希算法存储密码。这意味着如果您的系统支持更好的散列算法,则用户的密码应该是重复。使用较新的算法和存储。这是可能的migrate_from选择:

  1. 使用"migrate_from"配置一个新的编码器
  2. 升级密码
  3. 可选地,从自定义编码器触发密码迁移

使用"migrate_from"配置一个新的编码器

当有更好的哈希算法可用时,您应该保留现有的编码器,重命名它,然后定义新的编码器。设置migrate_from新编码器上的选项指向旧的、遗留的编码器:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#配置/包/ security.yaml安全:#……编码器:#过去某些用户使用的编码器遗留问题:算法:sha256encode_as_base64:迭代:1应用实体\ \用户:#新的编码器及其选项算法:migrate_from:-bcrypt#使用默认选项的"bcrypt"编码器-遗产#使用上面配置的“遗留”编码器

这样设置:

  • 新用户将使用新算法进行编码;
  • 每当用户登录时,其密码仍然使用旧算法存储,Symfony将使用旧算法验证密码,然后使用新算法重新哈希并更新密码。ob娱乐下载

提示

汽车本地的bcrypt而且编码器使用以下列表自动启用密码迁移migrate_from算法:

  1. PBKDF2(它使用hash_pbkdf2);
  2. 消息摘要(使用哈希

两者都使用hash_algorithm设置为算法。建议使用migrate_from而不是hash_algorithm,除非汽车使用编码器。

升级密码

在成功登录后,Security系统将检查是否有更好的算法可用于散列用户的密码。如果是,它将使用新的散列对正确的密码进行散列。如果使用Guard身份验证器,首先需要向安全系统提供原始密码

您可以通过实现这个新散列密码应该如何存储来启用升级行为:

在这之后,你就完成了,密码总是尽可能安全的散列!

使用Guard时,请提供密码

当你在使用定制时后卫身份,您需要实现PasswordAuthenticatedInterface.此接口定义了getPassword ()方法,该方法返回此登录请求的密码。该密码用于迁移过程:

12 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /安全/ CustomAuthenticator.php名称空间应用程序安全使用ob娱乐下载组件安全警卫PasswordAuthenticatedInterface/ /……CustomAuthenticator扩展AbstractGuardAuthenticator实现了PasswordAuthenticatedInterface/ /……公共函数getPassword凭证: ?字符串返回凭证“密码”];}}

使用Doctrine时升级密码

当使用实体用户提供商、实现PasswordUpgraderInterfaceUserRepository(见教义文档提供信息关于如何创建这个类(如果它还没有创建的话)。这个接口实现了存储新创建的密码哈希。

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /仓库/ UserRepository.php名称空间应用程序存储库/ /……使用ob娱乐下载组件安全核心用户PasswordUpgraderInterfaceUserRepository扩展EntityRepository实现了PasswordUpgraderInterface/ /……公共函数upgradePassword(用户界面用户、字符串newEncodedPassword无效//在User对象上设置新的编码密码用户->向setPassword (newEncodedPassword);//在数据库上执行查询->getEntityManager ()->冲洗(用户);}}

使用自定义用户提供程序时升级密码

如果你用的是定制用户提供程序,实现PasswordUpgraderInterface在用户提供程序中:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /安全/ UserProvider.php名称空间应用程序安全/ /……使用ob娱乐下载组件安全核心用户PasswordUpgraderInterfaceUserProvider实现了UserProviderInterfacePasswordUpgraderInterface/ /……公共函数upgradePassword(用户界面用户、字符串newEncodedPassword无效//在User对象上设置新的编码密码用户->向setPassword (newEncodedPassword);/ /……保存新密码}}

从自定义编码器触发密码迁移

如果使用自定义密码编码器,可以通过返回来触发密码迁移真正的needsRehash ()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /安全/ CustomPasswordEncoder.php名称空间应用程序安全/ /……使用ob娱乐下载组件安全核心编码器PasswordEncoderInterfaceCustomPasswordEncoder实现了PasswordEncoderInterface/ /……公共函数needsRehash(字符串编码保龄球//检查当前密码是否使用过时的编码器进行散列hashIsOutdated=……;返回hashIsOutdated;}}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。