【问题标题】:Spring Security 3 + Random SaltSpring Security 3 + 随机盐
【发布时间】:2012-05-17 16:10:33
【问题描述】:

所以我知道您可以根据 userDetail 属性使用盐检查 Spring Security 中的密码,然后对其进行散列以与数据库中的散列进行比较,但是如果创建每个用户时使用的盐是随机的(并且是存储在数据库中),我是否需要创建自己的包含 salt 属性的 userDetails 类,然后将其设置为 spring security 用于在 securityApplicationContext 中加盐的字段?

如果是这样,我将如何编写自己的 userDetails 类来实现这一点?抱歉,对 Spring/Java 还是很陌生。

【问题讨论】:

  • 您的问题的答案是Yes 如果盐是随机的,那么您需要将其提供给验证过程。只需像任何其他类一样编写userDetails 类。
  • 好的,但是我如何告诉 securityApplicationContext 使用 myCustomUserDetails 类而不是默认的 userDetails 类来存储用户?
  • 你最好使用像 Bcrypt 这样包含随机盐的算法。如果你在这里和其他地方在线搜索,你会发现这种东西has already been discussed before
  • 不幸的是,我在密码加密方面受到了约束。我需要将我的应用程序与另一个组的应用程序集成,该应用程序使用随机盐 + 哈希进行加密。
  • 是的,正如@Ramhound 所说,您需要与每个用户关联的盐值。您还必须实现与其他组的算法匹配的PasswordEncoder

标签: spring-security salt password-encryption


【解决方案1】:

好的,但是我如何告诉 securityApplicationContext 使用 myCustomUserDetails 类而不是默认的 userDetails 类来存储用户?

像这样:

<b:bean id="customUserDetailsService" class="com.your.company.security.MyUserDetailsService"/>

<s:authentication-provider user-service-ref="customUserDetailsService" />

这在您的安全上下文中。

这也可能有帮助。

Writing a custom UserDetailsService.

【讨论】:

  • 啊,我在谷歌搜索答案时看到了这篇文章,但我想我现在理解得更好了。所以为了确保,我实现了自己的 userDetailsS​​ervice,并在“loadByUsername”方法中返回了一个 userDetails 对象,它是我自己实现的 userDetails,对吗?
  • 是的。正是然后你注入你的新UserDetailsService
  • 好的,我得到了 CustomUserDetailsS​​ervice 和 CustomUserDetails,但是当我尝试登录时,它说用户名/密码组合不正确。不知道如何调试它。 SpringSecurity 如何将输入的密码与数据库密码进行比较?我将加盐密码的哈希值作为存储在数据库中的密码。它与变量类型有关吗?我从数据库中获取盐和哈希作为 byte[] 并在 CustomUserDetails 我有: password = new String(myUser.getHash(), "UTF8"); salt = new String(myUser.getSalt(), "UTF8");
  • 您可以在UserDetailsService 之外进行身份验证,并且您应该进行 IMO。您的应用程序可以自行对用户进行身份验证,它不应该需要 spring security 来做到这一点。用户详细信息服务的想法是让 spring “了解”您系统中的用户。所以通常我会创建类似LoginService 的东西并在用户尝试登录时调用它,而不是让UserDetailsService 知道密码。 UserDetailsService 应该只返回给定用户名的用户,无论用户是否已登录。
  • 另一件事,永远不要使用new String() 这就是原因:stackoverflow.com/questions/2009228/…
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 2011-06-25
  • 2011-11-14
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多