gpt4 book ai didi

spring - 使用spring security时如何更改密码哈希算法?

转载 作者:行者123 更新时间:2023-12-04 19:12:15 27 4
gpt4 key购买 nike

我正在开发一个基于 Spring MVC 的旧式 Web 应用程序,它使用了一种 - 根据当前标准 - 不合适的散列算法。现在我想逐渐将所有哈希迁移到 bcrypt。我的高级策略是:

  • 默认情况下,使用 bcrypt 生成新的哈希值
  • 当用户成功登录并且仍然拥有旧的哈希值时,应用程序会用新的 bcrypt 哈希值替换旧的哈希值。

  • 使用 Spring Security 实现此策略最惯用的方法是什么?我应该使用自定义过滤器还是我的 AccessDecisionManager 或...?

    最佳答案

    您可能需要自定义您的 AuthenticationProvider因为这是实际将密码与用户数据进行比较的地方,并且您拥有所需的所有信息。

    authenticate方法,您将首先加载用户数据。然后使用 BCryptPasswordEncoder 检查用户提供的密码和你的遗产。如果两者都不返回匹配项,则抛出 BadCredentialsException .

    如果用户身份验证成功(非常重要:-))并且密码是旧格式(旧编码器匹配),那么您将调用一些额外的代码来更新用户的帐户数据并将旧哈希替换为 bcrypt 哈希。 BCryptPasswordEncoder也可用于创建新的哈希。

    如果需要,您可以在进行比较之前提前检测存储的哈希是否已经是 bcrypt。 Bcrypt 字符串具有非常独特的格式。

    另请注意,为了更难猜测有效的帐户名称,您应该尝试使该方法在提供的用户名存在时和不存在时(就所需时间而言)的行为相同。因此,即使您没有提供的用户名的任何用户数据,也请调用编码器。

    关于spring - 使用spring security时如何更改密码哈希算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762772/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com