为基于Wildfly容器的身份验证生成salted /哈希密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为基于Wildfly容器的身份验证生成salted /哈希密码相关的知识,希望对你有一定的参考价值。
我无法使用基于Elytron的容器身份验证为Wildfly 13中的新用户生成正确的salted / hashed密码。
我的standalone.xml文件包含以下jdbc-realm
条目
<jdbc-realm name="TestDbRealm">
<principal-query sql="SELECT password,salt,role FROM users WHERE username=?" data-source="YacDS">
<attribute-mapping>
<attribute to="groups" index="3"/>
</attribute-mapping>
<salted-simple-digest-mapper algorithm="password-salt-digest-md5" password-index="1" salt-index="2"/>
</principal-query>
</jdbc-realm>
我的数据源的users
表生成如下:
CREATE TABLE users (
id SERIAL,
username VARCHAR(255),
password VARCHAR(255),
salt CHAR(8),
role VARCHAR(255),
PRIMARY KEY (id),
UNIQUE (username)
);
为了生成salted / hashed密码,我使用了以下Java:
String text = "password";
String salt = "12345678";
text = text + salt;
MessageDigest digest = MessageDigest.getInstance("MD5");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
String encoded = Base64.getEncoder().encodeToString(hash);
System.out.println(encoded);
使用密码password
和12345678
的盐,我得到u7Dd/xuUSzzGjqrresIAmQ==
作为盐渍和哈希密码。我使用该语句在我的数据库中插入了它
INSERT users(username, password, salt, role) VALUES ('user',
'u7Dd/xuUSzzGjqrresIAmQ==', '12345678', 'testRole');
但是,如果我使用user
:password
的用户名/密码组合登录我的应用程序,它拒绝验证我。
我相信问题在于我在哈希之前将盐应用于密码的方式,但我找不到任何文档来描述在使用盐时应如何生成password
字段的数据库值。
我能够使用simple-digest-mapper
而不是salted-simple-digest-mapper
工作,只是在不使用盐的情况下散列密码,所以我认为配置或数据库设置没有任何问题。只有在切换到salted-simple-digest-mapper
并使用盐后,帐户才能进行身份验证。
盐也应该是基础64。所以在你的情况下,盐应该是MTIzNDU2NzgK
echo "12345678" | base64
MTIzNDU2NzgK
Se [1]对于主题[1] https://issues.jboss.org/browse/ELY-1444的某些背景
以上是关于为基于Wildfly容器的身份验证生成salted /哈希密码的主要内容,如果未能解决你的问题,请参考以下文章
Wildfly 24 中带有 Elytron 的多个 sasl 身份验证机制
使用对Wildfly 10的远程EJB调用进行身份验证时出现问题
使用 WildFly 在 JMS 中进行 JAAS 身份验证:javax.jms.JMSSecurityException:HQ119032:用户:null 没有权限 = 在地址 2 上发送