微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Spring Security 5.x Bcrypt哈希迁移到Quarkus

如何解决从Spring Security 5.x Bcrypt哈希迁移到Quarkus

我正在尝试重写最初由Spring开发的应用程序。通过Spring Security提供的用户身份验证使用Bcrypt生成并检查哈希密码。

它们以下面显示的格式存储在数据库中。据我所知,这就是它的表示方式:

|  |RR|        Salt          |      Hashed Password        |
$2a$10$Dh23I3CO6l1n3mOofdazreNLg2OHxzDrxyGGZEstTbITKs.cX3N/u

RR是回合数)

我尝试将其迁移到新的表结构,如4.6. Component Documentation使用哈希密码表示下的“ 表3。示例表”中所示。 ,例如:

NAME | PASSWORD                        | SALT                   |IteraTION_COUNT|
=====|=================================|========================|===============|
test | NLg2OHxzDrxyGGZEstTbITKs.cX3N/u | Dh23I3CO6l1n3mOofdazre | 10            |

我已经在application.properties中配置了映射器,如下所示:

quarkus.security.jdbc.principal-query.sql=SELECT u.password,u.salt,u.iteration_count FROM test_user u WHERE u.name=?
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.enabled=true
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.password-index=1
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.hash-encoding=base64
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.salt-index=2
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.salt-encoding=base64
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.iteration-count-index=3

但是,我或者收到由无效的base64字符引起的错误(这并不让人感到意外,因为Spring Security中的实现指出它不是MIME兼容的base64实现),或者当不存在该错误时,它无法验证密码。

如何将所有用户迁移到Quarkus使用的Bcrypt实现?

解决方法

因此,我完全不需要拆分哈希迭代次数。您可以继续使用当前的“单字符串”格式。技巧是按照以下方式配置映射器(注意-1salt属性的iteration-count):

quarkus.security.jdbc.principal-query.bcrypt-password-mapper.enabled=true
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.password-index=1
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.salt-index=-1
quarkus.security.jdbc.principal-query.bcrypt-password-mapper.iteration-count-index=-1

尽管我没有在Wildfly Elytron文档或Quarkus配置文档中看到它,但它得到了明确处理(请参阅GitHub上的PasswordKeyMapper.java

当这两个属性设置为-1时,逻辑将满足。然后,它解析完整的字符串并成功验证密码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。