【问题标题】:Does LDAP Support BCrypt? Trying to implement BCrypt in Java Spring SecurityLDAP 是否支持 BCrypt?尝试在 Java Spring Security 中实现 BCrypt
【发布时间】:2014-10-12 22:09:41
【问题描述】:

我目前正在尝试在我的 Spring Security 中使用 LDAP 实现 BCrypt。我的问题是 LDAP 是否支持这一点,如果支持,我该如何实现?查看下图,我没有将 BCrypt 视为 LDAP 透视图中密码编辑器视图中的一个选项。我当前的基本身份验证使用纯文本密码;但是,我想增强安全性。

我当前的 security-context.xml 是:

<authentication-manager>
        <ldap-authentication-provider 
        user-search-filter="(uid={0})" 
        user-search-base="ou=users,${ldap.base}" 
        group-search-filter="(uniqueMember={0})"
        group-search-base="ou=roles,${ldap.base}" 
        group-role-attribute="cn" 
        role-prefix="ROLE_">


        </ldap-authentication-provider>

    </authentication-manager>

在我的情况下如何实施 BCrypt?我在某处读到我们可能必须使用UserDetailsService?

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 只要使用您的 LDAP 服务器支持的任何东西。 BCrypt 不在该列表中。

标签: java spring spring-security ldap bcrypt


【解决方案1】:

听起来您可能误解了启用 bcrypt(或任何其他哈希)实际上会实现什么,以及它将在哪里实现。例如,它不会对基本身份验证的工作方式产生任何影响。那仍然会以纯文本形式将密码发送到您的应用程序。然后将在服务器端完成密码散列,并根据存储的散列值进行检查。在非 LDAP 应用程序中,Spring Security 会在从数据库加载密码哈希后执行此验证。

LDAP 增加了另一层。在这种情况下,Spring Security 是 LDAP 服务器的客户端,将在 LDAP 绑定操作中使用提供的用户名和密码来尝试以用户身份进行身份验证。密码再次以明文形式发送,这次哈希和比较由 LDAP 服务器完成。

因此,如果您的目标是保护传输中的密码,则散列是无关紧要的。这就是您需要使用安全连接的原因。

理论上,您可以像使用数据库一样使用 LDAP,以您希望的任何散列格式存储密码,并让 Spring Security 读取它们并自行进行验证。这可能是您所指的UserDetailsService 选项。然而这不是正常的做法,它可能会破坏绑定身份验证的使用(因为 LDAP 服务器本身不理解密码编码),并且需要授予对密码字段的读取访问权限,这通常是不受欢迎的。

正如@EJP 所说,您可能应该坚持使用 SSHA 选项并使用安全连接到您的应用程序,也可能是到您的 LDAP 服务器。

【讨论】:

  • 感谢您的意见,卢克。在这种情况下,我们必须使用 LDAP 支持的选项。虽然我们更愿意使用 BCrypt。
  • 等待是什么阻止了某人在注册后和登录后在发送密码之前在应用程序端对密码进行哈希处理?
猜你喜欢
  • 2015-06-26
  • 2014-11-20
  • 2012-05-01
  • 2019-03-25
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多