如何使用db-spring3.1安全性实现自定义的SHA-256-salt-per-user登录/退出



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

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

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

  2. 似乎我必须在实现UserDetails的基础上添加一个额外的getSalt()方法,以便在根据存储的哈希密码检查用户提供的登录时使用它。

然后情况就变得不清楚了。我应该拦截登录请求。从第6.4.3节来看,Spring似乎会将用户提交的凭证映射到Authentication对象,并将其提交到AuthenticationManager

我的问题是:

i) Spring将向AuthenticationManager提交Authentication的哪些实现?如何检索名称和密码?

ii)我似乎必须实现我自己的AuthenticationManager。每次调用authenticate(...)时,我都会获取登录名和密码,并从数据库中获取UserDetails。然后,用相应的salt对提供的pwd进行散列,并与数据库散列项进行比较。对的

iii)AuthenticationManager API还具有supports(...)方法。应该如何实施?

iv)应如何配置AuthenticationAuthenticationManager

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

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

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

最新更新