如何迁移密码哈希
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何迁移密码哈希
为了保护密码,建议使用最新的哈希算法存储密码。这意味着如果您的系统支持更好的散列算法,则用户的密码应该是重复。使用较新的算法和存储。这是可能的migrate_from
选择:
使用"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
算法:
- PBKDF2(它使用hash_pbkdf2);
- 消息摘要(使用哈希)
两者都使用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时升级密码
当使用实体用户提供商、实现PasswordUpgraderInterface在UserRepository
(见教义文档提供信息关于如何创建这个类(如果它还没有创建的话)。这个接口实现了存储新创建的密码哈希。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /仓库/ UserRepository.php名称空间应用程序\存储库;/ /……使用ob娱乐下载\组件\安全\核心\用户\PasswordUpgraderInterface;类UserRepository扩展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娱乐下载\组件\安全\核心\用户\PasswordUpgraderInterface;类UserProvider实现了UserProviderInterface,PasswordUpgraderInterface{/ /……公共函数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娱乐下载\组件\安全\核心\编码器\PasswordEncoderInterface;类CustomPasswordEncoder实现了PasswordEncoderInterface{/ /……公共函数needsRehash(字符串$编码):保龄球{//检查当前密码是否使用过时的编码器进行散列$hashIsOutdated=……;返回$hashIsOutdated;}}