データベース認証用の JAAS カスタム・ログイン・モジュールの開発

データベースに認証するためのユーザー名とパスワードを追加するための Java™ 認証・承認サービス (JAAS) カスタム・ログイン・モジュールを開発できます。

このタスクについて

認証が必要なデータベース接続が作成されたときに呼び出せる JAAS カスタム・ログイン・モジュールを開発できます。 JAAS カスタム・ログイン・モジュールは、ユーザー名、パスワード、および管理接続ファクトリーが入ったパスワード・クレデンシャルを作成する責任を担います。 このログイン・モジュールでは、データベースへの認証に使用されるサブジェクトのプライベート・クレデンシャル・セットに、パスワード・クレデンシャルを追加する必要があります。

手順

  1. javax.security.auth.spi.LoginModule インターフェースを実装するクラスを作成します。
  2. 必要なフィールドを initialize メソッドで保存します。 以下に例を示します。
    /** {@inheritDoc} */
    @SuppressWarnings("unchecked")
    @Override
    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
      this.callbackHandler = callbackHandler;
      this.subject = subject;
      this.sharedState = (Map<String, Object>) sharedState;
      this.options = options;
    }
  3. login メソッドで WSManagedConnectionFactoryCallbackWSMappingPropertiesCallback のコールバックを処理します。 以下に例を示します。
    /** {@inheritDoc} */
    @Override
    public boolean login() throws LoginException {
      ...
      Callback callbacks[] = new Callback[2];
      callbacks[0] = new WSManagedConnectionFactoryCallback("Target ManagedConnectionFactory: ");
      callbacks[1] = new WSMappingPropertiesCallback("Mapping Properties (HashMap): ");
      callbackHandler.handle(callbacks);
  4. login メソッドで管理接続ファクトリーとプロパティーを取得します。 以下に例を示します。
    // The method getManagedConnectionFactory must be used as shown for compatibility with WebSphere traditional
    ManagedConnectionFactory managedConnectionFactory = ((WSManagedConnectionFactoryCallback) callbacks[0]).getManagedConnectionFacotry();
    Map properties = ((WSMappingPropertiesCallback) callbacks[1]).getProperties();
  5. 認証データ別名またはその他の基準に基づいてユーザー名とパスワードを取得します。 以下に例を示します。
    String alias = (String) properties.get(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS);
    String user = getUser(alias); // Implementation specific
    char[] password = getPassword(alias); // Implementation specific
  6. ユーザー名とパスワードで javax.resources.spi.PasswordCredential オブジェクトを作成し、管理接続ファクトリーを設定します。 以下に例を示します。
    javax.resource.spi.security.PasswordCredential passwordCredential = new PasswordCredential(user, password);
    passwordCredential.setManagedConnectionFactory(managedConnectionFactory);
  7. commit メソッドでサブジェクトにパスワード・クレデンシャルを追加します。以下に例を示します。
    /** {@inheritDoc} */
    @Override
    public boolean commit() throws LoginException {
      // Verify that the login was successful before adding the PasswordCredential to the subject.
      subject.getPrivateCredentials().add(passwordCredential);
      return true;
    }

トピックのタイプを示すアイコン タスク・トピック

ファイル名: twlp_dev_jaas_custom_login_module.html