4.1.1 実装する重要なメソッド
次の重要なメソッドを実装する必要があります:
encodePassword - このメソッドは、サーバーがクリアテキスト・パスワードを暗号化して格納する必要がある場合に起動されます。このメソッドには、ハッシュを実行するカスタム実装コードが含まれている必要があります。この値を維持しながら、Oracle Unified Directory (OUD)はこのエンコードされた値にサーバーに構成されているカスタム・スキームの名前で接頭辞を付けます。
たとえば、{custom1}encoded_value
では、custom1はOUD構成のユーザー定義パスワード記憶スキームの名前で、encoded_valueはこのメソッドで返される値です。
passwordMatches - このメソッドは、指定されたクリアテキスト・パスワードを検証する必要がある場合に起動されます。
たとえば、ldapbindまたはldapcompare操作中に資格証明を検証します。このメソッドは、この検証を実行するカスタム実装コードが含まれていて、パスワードが一致する場合にのみtrueを返す必要があります。OUDでは、このメソッド呼出しの結果に基づいて認証の成功または失敗の決定が行われます。
initializePasswordStorageSchemeおよびhandleConfigurationChange - サーバーからユーザー定義パスワード記憶スキーム構成を取得するには、これらのメソッドをオーバーライドする必要があります。
これらのメソッドの起動時に、構成を含むPasswordStorageSchemeConfigurationが提供されます。
次の例は、oracle.oud.pwdstoragescheme.PasswordStorageSchemeConfigurationを使用して構成を読み取る方法を示しています。カスタム・スキームで定義できるroundsおよびsaltlengthという2つの構成パラメータがあるとします。カスタム構成インタフェースは次のように表示されます:
例:
publicinterfaceCustomPasswordConfig extendsPasswordStorageSchemeConfiguration {
publicintgetRounds() throwsNullPointerException;
publicintgetSaltlength() throwsNullPointerException;
}
ユーザー定義スキームの実装内では、前述の2つの構成関連のオーバーライドされたメソッドによって、次の2つのパラメータが読み取られます:
@Override
public void initializePasswordStorageScheme(
final PasswordStorageSchemeConfiguration configuration)
throws PasswordStorageSchemeException {
try {
super.initializePasswordStorageScheme(configuration);
CustomPasswordConfig conf = this.getConfiguration(CustomPasswordConfig.class);
readConfigParams(conf);
} catch (Exception e) {
getLogger().logError("Error during CustomUserPasswordHash.initializePasswordStorageScheme "
+ e.getMessage());
throw new PasswordStorageSchemeException(ResultCode.OPERATIONS_ERROR, e);
}
}
@Override
public void handleConfigurationChange(
final PasswordStorageSchemeConfiguration configuration)
throws PasswordStorageSchemeException {
try {
super.handleConfigurationChange(configuration);
CustomPasswordConfig conf = this.getConfiguration(CustomPasswordConfig.class);
readConfigParams(conf);
} catch (Exception e) {
getLogger().logError("Error during CustomUserPasswordHash.handleConfigurationChange " + e.getMessage());
throw new PasswordStorageSchemeException(ResultCode.OPERATIONS_ERROR, e);
}
}
private void readConfigParams(CustomPasswordConfig conf) {
try {
this.numSaltBytes = conf.getSaltlength();
} catch (Exception e) {
getLogger().logDebug(LEVEL.INFO, "Config parameter saltlength not set");
}
try {
this.numRounds = conf.getRounds();
} catch (Exception e) {
getLogger().logDebug(LEVEL.INFO, "Config parameter rounds not set");
}
}