带有休眠和散列密码的 Spring Security DB 身份验证?
Posted
技术标签:
【中文标题】带有休眠和散列密码的 Spring Security DB 身份验证?【英文标题】:Spring Security DB Authentication w/Hibernate and hashed passwords? 【发布时间】:2011-02-13 02:31:40 【问题描述】:我正在尝试设置 spring security 3 来针对我的 hibernate 3 数据库对用户进行身份验证。我只在数据库中存储密码的 sha1 哈希值(不是明文)。
我查看了this 和this,它们告诉我实现自己的UserDetailsService。不幸的是,loadUserByUsername 吐出的 UserDetails 似乎需要明文密码,而我没有。
这通常是如何处理的? Spring Security 真的可以在这里做我需要的吗?我错过了什么吗?
【问题讨论】:
【参考方案1】:当您设置 UserDetailsService 时,spring 使用它来加载用户,然后将它们与登录信息进行比较。这意味着,它会比较密码。 但是,您可以配置密码编码器:Doc: Adding a Password Encoder
或者您只需编写自己的AuthenticationManager or AuthenticationProvider 来加载用户并确定用户是否成功登录。只需实现接口 AuthenticationProvider 并设置配置
<authentication-manager>
<authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>
<bean id="myAuthenticationProvider"
class="***.SuperduperMegaAuthenticationProvider">
</bean>
【讨论】:
【参考方案2】:通常 Userdetails 包含一个散列密码,您只需配置 Spring Security 以使用正确的password encoder 对其进行身份验证。
<password-encoder hash="md5"/>
在 Stack Overflow 答案 @Spring Security 3 database authentication with Hibernate 中查找上述密码编码器行。
在您的情况下,您应该将此行替换为:
<password-encoder hash="sha"/>
【讨论】:
以上是关于带有休眠和散列密码的 Spring Security DB 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章