セキュリティー属性伝搬のカスタム認証トークンの実装

このトピックでは、ログイン・サブジェクトおよび伝搬されたダウンストリームに設定される、独自の認証トークンの実装の作成方法を説明します。

このタスクの概要

この実装によって、カスタム・ログイン・モジュールまたはアプリケーションが使用できる 認証トークンを指定することができます。 以下のいずれかのタスクを行う場合は、独自の実装を書き込むことを考慮してください。
  • 独自の実装内で属性を分離します。
  • カスタム・シリアライゼーションを使用して情報をシリアライズします。 ターゲットでバイトをデシリアライズし、 その情報をスレッドに追加する必要があります。 このタスクはまた、暗号化および暗号化解除を含むことがあります。
  • getUniqueID アプリケーション・プログラミング・インターフェース (API) を使用してサブジェクトの全体的な固有性に影響を与えます。
重要: カスタム認証トークンの実装は、認証を強制するために WebSphere® Application Server のセキュリティー・ランタイムでは使用されません。 WebSphere Application Security ランタイムは、以下の状況でのみこのトークンを使用します。
  • シリアライゼーションのために getBytes メソッドを呼び出します
  • getForwardable メソッドを呼び出し、認証トークンをシリアライズするかどうかを決定します。
  • 固有性のために getUniqueId メソッドを呼び出します
  • ダウンストリームに送信されるトークン・ホルダーにシリアライズされたバイトを 追加するために getName および getVersion メソッドを呼び出します。
他の使用のすべてはカスタム実装です。

カスタム認証トークンを実装するには、 以下のステップを実行する必要があります。

手順

  1. AuthenticationToken インターフェースのカスタム・実装を書き込みます。
    AuthenticationToken インターフェースを実装するさまざまな方法がたくさんあります。 ただし、AuthenticationToken インターフェースおよびトークン・インターフェースが必要とするメソッドは完全に実装されていることを確認してください。 このインターフェースを実装した後、app_server_root/classes ディレクトリーにこれを配置することができます。 その代わりに、専用ディレクトリーにクラスを配置することもできます。 ただし、 WebSphere Application Server クラス・ローダーがそのクラスを見つけることができ、適切な権限が付与されていることを確認してください。 このクラスを含む Java™ アーカイブ (JAR) ファイルまたはディレクトリーを server.policy ファイルに追加して、このクラスがサーバー・コードで必要なアクセス権を持つようにすることができます。
    ヒント: 伝搬フレームワークによって定義されるすべてのトークン・タイプには、類似したインターフェースがあります。 トークン・タイプは、com.ibm.wsspi.security.token.Token インターフェースを実装するマーカー・インターフェースです。 このインターフェースはほとんどのメソッドを定義します。 複数のトークン・タイプを実装する場合は、com.ibm.wsspi.security.token.Token インターフェースを実装する抽象クラスを作成することを考慮してください。 すべてのトークン・実装 (認証トークンを含む) は、抽象クラスを拡張する可能性があり、その後作業のほとんどが完了します。

    AuthenticationToken インターフェースの実装を確認するには、 例: com.ibm.wsspi.security.token.AuthenticationToken 実装を参照してください。

  2. WebSphere Application Server ログイン時にカスタム認証トークンを追加して受け取ります。
    このタスクは通常、 カスタム・ログイン・モジュールをさまざまなアプリケーションおよびシステム・ログイン構成に追加することによって行われます。 ただし、情報をデシリアライズするために、カスタム・ログイン・モジュールに接続する必要があります。 オブジェクトがログイン・モジュールでインスタンス化されると、commit メソッド中にオブジェクトをサブジェクトに追加することができます。

    伝搬させるためにサブジェクトに情報を追加するだけの場合は、 セキュリティー属性伝搬のためのカスタム Java シリアライズ可能オブジェクトの伝搬を参照してください。 情報が確実に伝搬されるようにする場合、 独自のカスタム・シリアライゼーションを行う場合、またはサブジェクト・キャッシング目的で固有性を指定する場合には、 独自の認証トークンの実装を作成することを検討します。

    例: カスタム認証トークン・ログイン・モジュールのコード・サンプルは、ログインが初期ログインであるか伝搬ログインであるかを判別する方法を示しています。 これらのログイン・タイプの違いは、WSTokenHolderCallback コールバックが 伝搬データを含んでいるかどうかです。 コールバックが伝搬データを含んでいない場合、新規カスタム認証トークンの実装を初期化し、それをサブジェクトに設定します。 コールバックが伝搬データを含んでいる場合は、 特定のカスタム認証トークン TokenHolder インスタンスを探し、バイト配列をカスタム AuthenticationToken オブジェクトに変換して、それをサブジェクト内に設定します。 コード・サンプルは両方のインスタンスを示します。

    ログイン・モジュールのコミット・フェーズで認証トークンを読み取り専用にすることができます。 そのトークンを読み取り専用にしない場合は、属性はアプリケーション内に追加できます。

  3. カスタム許可トークンのシリアライズ版を受信するための com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule ログイン・モジュールが既に含まれている WebSphere Application Server システム・ログイン構成に、カスタム・ログイン・モジュールを追加します。

    このログイン・モジュールが com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule ログイン・モジュールが追加した共有状態の情報に依存しているため、このログイン・モジュールを com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule ログイン・モジュールの後に追加します。 既存のログイン構成にカスタム・ログイン・モジュールを追加する方法については、『JAAS のシステム・ログイン構成用のカスタム・ログイン・モジュールの開発』を参照してください。

結果

これらのステップが完了すると、カスタム認証トークンが実装されます。