gpt4 book ai didi

spring-security - Spring security 3.1.4 和 ShaPasswordEncoder 弃用

转载 作者:行者123 更新时间:2023-12-03 20:20:54 26 4
gpt4 key购买 nike

今天我将我正在开发的应用程序的 spring 安全版本从 3.1.3 升级到 3.1.4,我注意到 org.springframework.security.authentication.encoding.ShaPasswordEncoder 上有一个弃用警告。类(class)。

所以我切换到新的org.springframework.security.crypto.password.StandardPasswordEncoder执行。

我让它工作了,我能够在我的应用程序中注册一个新用户并登录,但是,正如我所担心的,我无法使用以前的 ShaPasswordEncoder 和我的自定义盐生成的密码登录。

由于我有一个已经注册了许多用户的数据库,我应该怎么做才能在不使旧的编码密码失效的情况下切换实现?
甚至有可能吗?

另见:How to use new PasswordEncoder from Spring Security

最佳答案

如果您想切换到更安全的密码编码机制,那么我建议您使用 BCrypt .我会使用这样的东西来迁移你的用户:

// Implement the old PasswordEncoder interface
public class MigrateUsersPasswordEncoder implements PasswordEncoder {
@Autowired
ShaPasswordEncoder legacyEncoder;
@Autowired
JdbcTemplate template;

BCryptPasswordEncoder bcryptEncoder = new BCryptPasswordEncoder();

@Override
public String encodePassword(String rawPass, Object salt) {
return bcryptEncoder.encode(rawPass);
}

@Override
public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
if (legacyEncoder.isPasswordValid(encPass, rawPass, salt)) {
template.update("update users set password = ? where password = ?", bcryptEncoder.encode(rawPass), encPass);
return true;
}
return bcryptEncoder.matches(rawPass, encPass);
}
}

您可以通过密码字段的格式查看迁移的用户比例。 BCrypt 字符串具有以 $ 开头的独特语法。标志。

其他答案之一指出,此代码可能会意外地同时更新多个密码。该问题指出正在使用自定义盐,因此如果随机选择盐,则冲突的可能性可以忽略不计,但情况可能并非总是如此。如果更新了两个密码,会出现什么问题?然后可以从 bcrypt 哈希中检测到帐户具有相同的密码。无论如何都是这种情况,因为它要求 SHA 哈希值相同才能进行更新。如果您认为这可能是一个问题(例如,由于盐选择不当或什至使用未加盐的哈希),修改 SQL 以检测此问题并使用单独的 BCrypt 哈希值执行多次更新将是微不足道的。

关于spring-security - Spring security 3.1.4 和 ShaPasswordEncoder 弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com