CredentialHandler コンポーネント

目次

はじめに

CredentialHandler要素は、パスワードなどの提供されたクレデンシャルを、Realmによって保存されたクレデンシャルのバージョンと比較するために、Realmによって使用されるコンポーネントを表します。 CredentialHandlerは、例えば、Realmに新しいユーザーを追加したり、ユーザーのパスワードを変更したりする際に必要な、与えられたクレデンシャルの新しい保存バージョンを生成するためにも使用できます。

CredentialHandler要素は、Realmコンポーネント内にネストされている必要があります。含まれていない場合、デフォルトのCredentialHandlerMessageDigestCredentialHandlerを使用して作成されます。

属性

共通属性

CredentialHandlerのすべての実装は、以下の属性をサポートしています。

属性説明
className

使用する実装のJavaクラス名。このクラスは、org.apache.catalina.CredentialHandlerインターフェースを実装する必要があります。

ほとんどのCatalinaコンポーネントとは異なり、いくつかの標準のCredentialHandler実装が利用可能です。そのため、CredentialHandler要素が存在する場合は、使用したい実装を選択するためにclassName属性を使用する必要があります。

MessageDigestCredentialHandler

MessageDigestCredentialHandlerは、保存されたパスワードがメッセージダイジェストによって保護されている場合に使用されます。このクレデンシャルハンドラは、以下の形式の保存されたパスワードをサポートします。

  • plainText - アルゴリズムが指定されていない場合のプレーンテキストのクレデンシャル
  • encodedCredential - 設定されたダイジェストを使用してダイジェストされたパスワードの16進数エンコードされたダイジェスト
  • {MD5}encodedCredential - パスワードのBase64エンコードされたMD5ダイジェスト
  • {SHA}encodedCredential - パスワードのBase64エンコードされたSHA1ダイジェスト
  • {SSHA}encodedCredential - 20文字のソルトの後、Base64エンコードされたソルト付きSHA1ダイジェスト
  • salt$iterationCount$encodedCredential - 16進数エンコードされたソルト、イテレーション回数、および16進数エンコードされたクレデンシャル。それぞれ$で区切られます。

保存されたパスワード形式にイテレーション回数が含まれていない場合は、イテレーション回数1が使用されます。

保存されたパスワード形式にソルトが含まれていない場合は、ソルトは使用されません。

属性説明
algorithm

データベースに保存されたユーザーパスワードをエンコードするために使用されるjava.security.MessageDigestアルゴリズムの名前。指定しない場合、ユーザーパスワードはクリアテキストで保存されているとみなされます。

encoding

パスワードをダイジェストするには、バイトに変換する必要があります。この属性は、文字とバイトの間の変換に使用する文字エンコーディングを決定します。指定しない場合、UTF-8が使用されます。

iterations

クリアテキストのクレデンシャルから新しい保存されたクレデンシャルを作成するときに使用するイテレーションの回数。

saltLength

クリアテキストのクレデンシャルから新しい保存されたクレデンシャルを作成するときに使用する、ランダムに生成されるソルトの長さ。

NestedCredentialHandler

NestedCredentialHandlerは、1つ以上のサブクレデンシャルハンドラに委譲するCredentialHandlerの実装です。

NestedCredentialHandlerを使用すると、開発者は同じまたは異なる種類の複数のCredentialHandlerを組み合わせることができます。

サブクレデンシャルハンドラは、NestedCredentialHandlerを定義するCredentialHandler要素内にCredentialHandler要素をネストすることによって定義されます。クレデンシャルは、リストされている順に各CredentialHandlerと照合されます。いずれかのCredentialHandlerとの一致は、クレデンシャルが一致するとみなされるのに十分です。

SecretKeyCredentialHandler

SecretKeyCredentialHandlerは、保存されたパスワードがjavax.crypto.SecretKeyFactoryを使用して構築されている場合に使用されます。このクレデンシャルハンドラは、以下の形式の保存されたパスワードをサポートします。

  • salt$iterationCount$encodedCredential - 16進数エンコードされたソルト、イテレーション回数、および16進数エンコードされたクレデンシャル。それぞれ$で区切られます。

保存されたパスワード形式にイテレーション回数が含まれていない場合は、イテレーション回数1が使用されます。

保存されたパスワード形式にソルトが含まれていない場合は、ソルトは使用されません。

属性説明
algorithm

データベースに保存されたユーザーパスワードをエンコードするために使用される秘密鍵アルゴリズムの名前。指定しない場合は、デフォルトのPBKDF2WithHmacSHA1が使用されます。

keyLength

保存されたクレデンシャルに対して生成する鍵の長さ。指定しない場合は、デフォルトの160が使用されます。

iterations

クリアテキストのクレデンシャルから新しい保存されたクレデンシャルを作成するときに使用するイテレーションの回数。

saltLength

クリアテキストのクレデンシャルから新しい保存されたクレデンシャルを作成するときに使用する、ランダムに生成されるソルトの長さ。

ネストされたコンポーネント

NestedCredentialHandler 実装を使用している場合、またはNestedCredentialHandlerを拡張するCredentialHandlerを使用している場合は、1つ以上の<CredentialHandler>要素をその中にネストできます。

特別な機能

CredentialHandler要素に関連付けられた特別な機能はありません。