Java 如何使用db spring 3.1安全性实现每个用户登录/注销的定制SHA-256 salt?
我正在广泛阅读这份文件,但我找不到所有问题的答案 在SpringWeb应用程序中,基于表单登录(user+pwd),我想使用SHA-256对用户密码进行加密,对每个用户使用随机加密。这意味着我必须在数据库中为每个用户保存salt和哈希密码。目前没有问题Java 如何使用db spring 3.1安全性实现每个用户登录/注销的定制SHA-256 salt?,java,spring,authentication,salt,Java,Spring,Authentication,Salt,我正在广泛阅读这份文件,但我找不到所有问题的答案 在SpringWeb应用程序中,基于表单登录(user+pwd),我想使用SHA-256对用户密码进行加密,对每个用户使用随机加密。这意味着我必须在数据库中为每个用户保存salt和哈希密码。目前没有问题 显然,我必须实现自己的UserDetailsService,从数据库中获取用户信息,并在spring security.xml中进行配置 似乎我必须在UserDetails的实现之上添加一个额外的getSalt()方法,以便在根据存储的哈希密码检
UserDetailsService
,从数据库中获取用户信息,并在spring security.xml
中进行配置UserDetails
的实现之上添加一个额外的getSalt()
方法,以便在根据存储的哈希密码检查用户提供的登录时可用身份验证
对象,并将其提交到身份验证管理器
我的问题是:
i) Spring将向AuthenticationManager
提交什么身份验证实现?如何检索名称和密码
ii)似乎我必须实现自己的AuthenticationManager
。每次调用authenticate(…)
,我都会从数据库中获取登录名和密码,获取UserDetails
。然后,用相应的salt散列提供的pwd,并与数据库散列项进行比较。对吗
iii)AuthenticationManager
API还有一个支持(…)
方法。应该如何实施
iv)应该如何配置身份验证
和身份验证管理器
?我一定没有正确阅读您的问题,但是Spring Security提供了现成的安全密码:
如果8位salt不足,您可以将自己的SaltSource注入到DaoAuthenticationProvider中。该手册实际上强烈建议这样做。只是出于好奇,您选择使用用户密码是否有特殊的原因/要求?@Andre确保如果有人破坏数据库,他们将无法访问源密码。这就是我的想法。我只是想知道你是否需要储存盐。我曾多次遇到BCrypt,并最终将其与Spring Security一起使用;它很好用。看看这个帖子:我想我在文档中做得不够深入。谢谢