37370
tomcat8.5とpostgresql9.2とを連携してユーザー認証機能を作成しようとしていますが，  
DBに保存するパスワードの文字列が平文（plain text）の場合は動作の確認ができますが，  
暗号化するとうまく動作しません．

以下，簡単にtomcatの設定と，DBの内容をまとめます．

$CATALINA_HOME/conf/context.xml

```

    <Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource"
        maxTotal="100" maxIdle="30" maxWaitMillis="10000"
        username="postgres" password="postgres" 
        driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/testdb" />
    
```

$CATALINA_HOME/conf/server.xml

```

      <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>
    
```

webapp/WEB-INF/web.xml

```

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Auth Interface</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>app-usr</role-name>
        </auth-constraint>
    </security-constraint>
    
    <login-config>
        <auth-method>DIGEST</auth-method>
        <realm-name>User Auth</realm-name>
    </login-config>
    
```

DBには該当するusr_authテーブルとauth_roleテーブルを以下のように作成しています．

usr_auth

```

      列  |           型           |  修飾語
    ------+------------------------+----------
     usr  | character varying(40)  | not null
     pass | character varying(200) | not null
    インデックス:
        "usr_auth2_pkey" PRIMARY KEY, btree (usr)
    
```

auth_role

```

        列    |          型           |  修飾語
    ----------+-----------------------+----------
     usr      | character varying(40) | not null
     usr_role | character varying(30) |
    インデックス:
        "auth_role_pkey" PRIMARY KEY, btree (usr)
    
```

上記のような設定で，DBには

```

    $CATALINA_HOME/bin/digest.sh -a MD5 hogehoge
    hogehoge:1957d2b05cb99....
    
```

で出力された暗号列を

```

    insert into usr_auth values('aaa','1957d2b05cb99....');
    
```

のように登録し，ロールについても対応のレコードを登録してあります．  
以上のような設定ではtomcatの起動，認証ダイアログの表示は確認できましたが，  
認証を通過できませんでした．

上記の`server.xml`の`<CredentialHandler>`の行をコメントアウトし，

```

    insert into usr_auth values('bbb','hogehoge');
    
```

のように登録した場合，ログインすることができました．

DBの登録方法に問題があるのか，tomcatの設定に問題があるのか，  
わかる方がいらっしゃいましたら，宜しくお願いします．
CC BY-SA 3.0
2017-08-19T03:12:20.350
37325
2017-08-21T07:27:01.640
24942
question
postgresql tomcat md5
tomcat8.5 と postgresql9.2 でのユーザー認証の際のパスワードの暗号化
すみません。自己解決しました。

公式サイトをよく読んでませんでした。  
<https://tomcat.apache.org/tomcat-8.5-doc/realm-howto.html#Digested_Passwords>

DBに登録すべき文字列は、

```

    $CATALINA_HOME/bin/digest.sh -a MD5 -s 0 -i 1 usr:User Auth:hogehoge
    
```

のようにして作成すべきでした。  
失礼しました。
CC BY-SA 3.0
2017-08-21T07:27:01.640
37370
2017-08-21T07:27:01.640
24942
37325
answer