我正在将 Wildfly22 与 java EJB 客户端一起使用,并成功地让客户端使用具有单独域和 jdbc-realm 的 elytron 登录。
但是,我目前不得不在数据库中使用普通密码,这显然不利于生产。
我尝试使用 base64 和 md5 对它们进行哈希处理,并使用简单的摘要映射器:
jdbc-realm name="jdbcRealm">
<principal-query sql="SELECT passwd FROM users where username = ?" data-source="TechDS">
<simple-digest-mapper password-index="1"/>
</principal-query>
<principal-query sql="SELECT role FROM userroles WHERE username = ?" data-source="TechDS">
<attribute-mapping>
<attribute to="roles" index="1"/>
</attribute-mapping>
</principal-query>
但是现在我得到了 ELY05051:回调处理程序不支持凭证获取。
我认为这里更大的问题是我对客户端演示代码之间的关系缺乏了解:
final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
AuthenticationContext.empty().with(
MatchRule.ALL.matchHost("localhost").matchPort(8080),
AuthenticationConfiguration.empty()
.useRealm("jdbcRealm")
.setSaslMechanismSelector(SaslMechanismSelector.NONE.addMechanism("DIGEST-MD5")) .useName("failquick")
.usePassword("mypassword")
).run(() -> {
try {
...
} catch (Exception e) {
e.printStackTrace();
return;
}
});
以及数据库中的密码存储格式。重申一下,当我使用 clear-password-mapper 时,一切正常。
对此的任何帮助表示赞赏。