2

我正在广泛阅读文档Spring 3.1 安全文档,但我找不到所有问题的答案。

在 Spring Web 应用程序中,基于表单登录(用户 + pwd),我想使用 SHA-256 对用户密码进行加盐,为每个用户使用随机加盐。这意味着我必须在我的数据库中为每个用户保存盐和散列密码。到目前为止没有问题。

  1. 很明显,我必须自己实现UserDetailsService以从我的数据库中获取我的用户信息并在我的spring-security.xml.

  2. 似乎我必须getSalt()在我的实现之上添加一个额外的方法,UserDetails以便在检查用户提供的登录名与存储的散列密码时可用。

然后情况变得不明朗。我应该拦截登录请求。从第 6.4.3 节开始,似乎 Spring 会将用户提交的凭据映射到一个Authentication对象并将其提交给AuthenticationManager.

我的问题是:

Authenticationi) Spring 将提交什么实现AuthenticationManager?如何找回用户名和密码?

ii) 看来我必须实现自己的AuthenticationManager. 在每次调用时,我都会从数据库中authenticate(...)获取登录名和密码。UserDetails然后,用相应的盐对提供的密码进行哈希处理,并与数据库哈希项进行比较。正确的?

iii) AuthenticationManagerAPI 也有一个supports(...)方法。应该如何实施?

iv) 应该如何Authentication配置AuthenticationManager

4

1 回答 1

2

我一定没有正确阅读您的问题,但 Spring Security 提供了开箱即用的加盐密码:

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/core-services.html#d0e3021

如果 8 位 salt 不足,您可以将自己的 SaltSource 注入 DaoAuthenticationProvider。该手册实际上强烈建议这样做。

于 2012-07-18T15:49:50.150 回答