JdbcRealm with WildFly 9.0.1.Final

Dec 25, 2015   #Java  #WildFly  #JavaEE 

以前、「WildFlyでJdbcRealm」 という記事を書きました。 これを現在インストールしている9.0.1.Final上で設定したところ、認証がうまく行われないことがわかりました。 大枠の変更はないのですが、DBに登録するパスワードのハッシュ文字列が当時とは異なる値である必要があったので、 忘れないようにメモしておきます。

差分

WildFly 8.0.0.Finalの時の設定:

<security-domain name="app" cache-type="default">
    <authentication>
        <login-module name="app_auth" code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
            <module-option name="principalsQuery" value="SELECT PASSWORD FROM ACCOUNTS WHERE EMAIL = ?"/>
            <module-option name="rolesQuery" value="SELECT r.ROLENAME, 'Roles' FROM ROLES r, ACCOUNTS a WHERE r.ACCOUNTID = a.ACCOUNTID AND a.EMAIL = ?"/>
            <module-option name="hashAlgorithm" value="SHA-256"/>
            <module-option name="hashEncoding" value="HEX"/>
        </login-module>
    </authentication>
</security-domain>

WildFly 9.0.1.Finalの設定:

<security-domain name="app" cache-type="default">
    <authentication>
        <login-module name="app_auth" code="Database" flag="required">
            <module-option name="dsJndiName" value="java:jboss/datasources/ExampleDS"/>
            <module-option name="principalsQuery" value="SELECT PASSWORD FROM ACCOUNTS WHERE EMAIL = ?"/>
            <module-option name="rolesQuery" value="SELECT r.ROLENAME, 'Roles' FROM ROLES r, ACCOUNTS a WHERE r.ACCOUNTID = a.ACCOUNTID AND a.EMAIL = ?"/>
            <module-option name="hashAlgorithm" value="SHA-256"/>
            <module-option name="hashEncoding" value="base64"/>
        </login-module>
    </authentication>
</security-domain>

違いは module-option の hashEncoding の値。 8.0.0.Finalの時はHEXであり、9.0.1.Finalではbase64にしています。 これはパスワードのハッシュエンコーディングの形式を指定している部分なのですが、 9.0.1.FinalではHEXを認識していない模様。 なので、DBに登録するパスワードのハッシュ文字列も設定に合わせてHEXからbase64に変更します。

パスワードのハッシュ文字列生成方法

WildFlyにはbase64のハッシュ文字列を生成するモジュールが入っているようです。 以下のコマンドで指定文字列のBase64ハッシュ値を取得することができます。

java -cp $JBOSS_HOME/modules/system/layers/base/org/picketbox/main/picketbox-4.9.2.Final.jar org.jboss.security.Base64Encoder [任意文字列] SHA-256

参考サイト