LoginSignup
1
1

More than 5 years have passed since last update.

tomcat8.5のユーザー認証機能におけるパスワードのdigest化

Posted at

tomcatとDBを連携してユーザー認証

tomcatの機能としてDBと連携してユーザー認証機能を実現できますが、なかなか記事がなかったので、まとめておきます。tomcatのバージョンによっても結構違うっぽい。

DBとの連携(JDBC vs DataSource)

tomcat上でDBと接続するためには、設定ファイル(server.xmlやcontext.xml)に接続情報を記述する必要がありますが、JDBCかDataSourceの2種類のRealmで記述できます。
以下の投稿にあるように、JDBCでは処理コストが高いからDataSourceの方がよいそうです。
https://stackoverflow.com/questions/35732482/what-is-the-difference-between-jdbcrealm-and-datasourcerealm

digestパスワード

DBにIDとパスワードを格納しますが、平文で格納するよりは何らかの形で暗号化をしたいところです。

  <Realm className="org.apache.catalina.realm.DataSourceRealm"
    debug="99"
    dataSourceName="jdbc/postgres" userTable="usr_auth" userNameCol="usr"
    userCredCol="pass" userRoleTable="auth_role" roleNameCol="usr_role"
    localDataSource="true">
      <CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="MD5" />
  </Realm>

のように<CredentialHandler>によってdigest化するアルゴリズムを指定できます。
ここでパスワードのエンコード方法ですが、

$CATALINA_HOME/bin/digest.(sh|bat)

が用意されているので、コレを利用してエンコードをします。その際ユーザーIDとweb.xmlの
<login-config>で指定している<realm-name>の値を用いて

$CATALINA_HOME/bin/digest.sh -a MD5 -s 0 usr:realm:password

のようにしてエンコードしたパスワードを生成します。
公式には、認証方式がdigestで、格納パスワードもdigest化したい場合は、
MD5のsaltなしでないとできないように書かれています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1