如何配置 Payara JDBCRealm/jdbcDigestRealm 以 httpd 样式存储密码

How to configure Payara JDBCRealm/jdbcDigestRealm to store passwords in httpd style

我在 Payara 中使用带有 JAAS Context=jdbcDigestRealm 的 JDBCRealm 来执行 http 摘要身份验证。如果我将它设置为在我的用户数据库中使用明文密码,一切都会按预期进行。但我想将密码作为 MD5(username:realm:password) 存储在数据库中,就像 Apache httpd 一样。遗憾的是无法在 JDBCRealm 中找到设置来处理该问题。存储明文密码当然不可取。

我应该如何配置 Payara 中的 JDBCRealm 设置以允许使用存储为 MD5(username:realm:password) 的密码?

这是我使用明文密码的工作设置:

     <auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="digestrealm">
      <property name="jaas-context" value="jdbcDigestRealm"></property>
      <property name="datasource-jndi" value="jdbc/userrepo"></property>
      <property name="user-table" value="usertable"></property>
      <property name="user-name-column" value="username"></property>
      <property name="password-column" value="password"></property>
      <property name="group-table" value="grouptable"></property>
      <property name="group-name-column" value="groupname"></property>
      <property name="charset" value="UTF-8"></property>
      <property name="digest-algorithm" value="None"></property>
     </auth-realm>

在浏览了一段时间的Payara源代码后,我自己找到了答案。通过在 JDBC 域上将 属性 "Encoding" 设置为 "Hashed",数据库中的密码假定为 MD5(用户名:域:密码)格式。

此功能似乎完全没有记录。

 <auth-realm classname="com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm" name="digestrealm">
  <property name="jaas-context" value="jdbcDigestRealm"></property>
  <property name="datasource-jndi" value="jdbc/userrepo"></property>
  <property name="user-table" value="usertable"></property>
  <property name="user-name-column" value="username"></property>
  <property name="password-column" value="password"></property>
  <property name="group-table" value="grouptable"></property>
  <property name="group-name-column" value="groupname"></property>
  <property name="charset" value="UTF-8"></property>
  <property name="digest-algorithm" value="None"></property>
  <property name="encoding" value="HASHED"></property>
 </auth-realm>