gpt4 book ai didi

Spring Security with Hibernate,存储加密密码

转载 作者:行者123 更新时间:2023-12-04 18:17:28 25 4
gpt4 key购买 nike

我确定以前有人问过这个问题,但我找不到任何可以回答这个问题的东西。

使用 Spring-security,我正在使用密码编码器。

<beans:bean class="org.springframework.security.authentication.encoding.ShaPasswordEncoder" id="passwordEncoder"/>


<authentication-manager>
<authentication-provider user-service-ref='CustomUserDetailsService'>
<password-encoder ref="passwordEncoder"/>
</authentication-provider>
</authentication-manager>

在我的 UserDAOImpl 添加用户时,我有以下代码......
@Override
public void addUser(final User user) {
user.setPassword(passwordEncoder.encodePassword(user.getPassword(), "salt"));
sessionFactory.getCurrentSession().save(user);
}

我的密码被正确编码,但总是被读取为无效,这是有道理的,因为我不知道 Spring 如何知道我的盐是“盐”——你如何告诉 Spring Security 和 Hibernate 使用相同的盐?我是否遗漏了有关 Spring Security 如何管理密码的信息?

最佳答案

推荐的方法是使用标准密码编码器,它将使用随机盐,并将此盐与消化密码一起存储。这样,您不需要提供任何盐。如果您想提供自己的盐,则需要将 SaltSource 注入(inject) DAO 身份 validator ,如 the documentation 所述。 (当然,当您对密码进行编码以创建新用户时,请使用相同的来源):

The StandardPasswordEncoder in the crypto package uses a random 8-bytesalt, which is stored in the same field as the password.

Note

The legacy approach to handling salt was to inject a SaltSource intothe DaoAuthenticationProvider, which would obtain a salt value for aparticular user and pass it to the PasswordEncoder. Using a randomsalt and combining it with the password data field means you don'thave to worry about the details of salt handling (such as where thethe value is stored), as it is all done internally. So we'd stronglyrecommend you use this approach unless you already have a system inplace which stores the salt separately.


在您的情况下, SaltSource 将始终返回“盐”。请注意,这种加盐方式是不安全的,因为所有共享共同密码的用户(是的,确实如此)最终都会使用相同的散列密码。这意味着攻击者在找到一个用户的密码时,也会找到共享相同密码的所有用户的密码。

关于Spring Security with Hibernate,存储加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376244/

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