WebSphere Application Server - Express for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

例: デフォルトの伝搬トークンの使用

デフォルトの伝搬トークンは、使用するアプリケーションおよびセキュリティー・インフラストラクチャーの 実行スレッドに配置されています。WebSphere Application Server はこのデフォルトの伝搬トークンをダウンストリームに伝搬し、 トークンは各ホップで呼び出しを行なうスレッドにとどまります。

データは、伝搬トークンを行う任意のリソースのコンテナーから選択可能です。 伝搬が行われるためには、要求が送られる各サーバーで伝搬機能を使用可能にしておく必要があることに留意してください。 ご使用の環境で伝搬を行いたいすべてのセルについて、 セキュリティー属性の伝搬が使用可能になっていることを確認してください。

PropagationToken 属性にアクセスするためのアプリケーション・プログラミング・インターフェース (API) を有する WSSecurityHelper クラスがあります。 このトピックでは使用法のシナリオを示し、実例を挙げます。 伝搬トークンと作業域フィーチャーの間には、 密接な関係があります。これらのフィーチャー間の主な相違点は、 伝搬トークンに属性を追加した後は、その属性を変更できない点にあります。 セキュリティー・ランタイムが監査可能な情報を追加し、 呼び出しが行われている間、その情報を保持できるようにするため、 これらの属性を変更することはできません。 特定のキーに属性を追加するときはいつでも、 その属性を格納するための ArrayList オブジェクトが保存されます。 同じキーを使用して任意の新規属性を追加すると、 その ArrayList オブジェクトに追加されます。getAttributes を呼び出すと、 ArrayList オブジェクトはストリング配列に変換され、その順序は保持されます。ストリング配列の最初のエレメントは、 その特定キーに追加された最初の属性です。

デフォルトの伝搬トークンでは、 トークンに加えられた任意のデータ変更を記録する変更フラグが立てられます。 これらの変更が追跡されることによって、 WebSphere Application Server は認証情報をどの時点でダウンストリームに再送すべきかを認識でき、 ダウンストリーム・サーバーがその変更を入手できます。 通常は Common Secure Interoperability バージョン 2 (CSIv2) が認証済みクライアント・サーバー間のセッションを維持します。 伝搬トークンが変更されると、新しいセッションが生成され、その結果新しい認証が起こります。 メソッド中の伝搬トークンを頻繁に変更することは、 ダウンストリーム呼び出しが頻繁に行われる原因となります。 下流で多くの呼び出しが行われる前にトークンを変更する場合、または下流 の各呼び出しの間にトークンを変更する場合、セキュリティーのパフォーマンスに影響が及びます。

デフォルトの伝搬トークンからのサーバー・リストの取得

伝搬トークンが水平、 もしくは下流に伝搬され、認証済みサブジェクトを作成するために使用されるたびに、 受信側のアプリケーション・サーバーの名前が伝搬トークンに記録されます。ホストのフォーマットは 「Cell:Node:Server」で、これによって、呼び出しを受信 する各アプリケーション・サーバーのセル名、ノード名、サーバー名を利用できます。 以下のコードは Java 2 プラットフォームの Enterprise Edition (J2EE) アプリケーションから呼び出せる名前のリストをユーザーに提供します。

String[] server_list = null;

// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
// Gets the server_list string array
server_list = com.ibm.websphere.security.WSSecurityHelper.getServerList();
}
catch (Exception e)
{
// Performs normal exception handling for your application
}

if (server_list != null)
{
// print out each server in the list, server_list[0] is the first server
for (int i=0; i<server_list.length; i++)
{
System.out.println("Server[" + i + "] = " + server_list[i]);
}
}
}

リストの各サーバーのフォーマットは、cell:node_name:server_name です。 例えば、出力は次のようになります。myManager:node1:server1

デフォルトの伝搬トークンからの呼び出し元リストの取得

デフォルトの伝搬トークンは、 認証済みユーザーが実行スレッドに設定されたとき、あるいは誰かが伝搬トークンに属性を追加しようとしたときに、 生成されます。認証済みユーザーがスレッドに設定されるときには、そのユーザーは必ず、 デフォルトの伝搬トークンに記録されています。RunAs ユーザーが呼び出し元とは違っている場合、ときどき、同じユーザーが複数回記録されている可能性があります。以下のリストは、スレッドに追加されるユーザーを伝搬トークンに記録するかどうかを決定するのに 使用される規則を示します。
  • 現行のサブジェクトは認証済みでなければなりません。 例えば、非認証サブジェクトは記録されません。
  • 現行の認証済みサブジェクトは、以前に記録されていない場合に記録されます。
  • 現行の認証済みサブジェクトは、 最後に記録された認証済みサブジェクトが同じユーザーを含んでいない場合に記録されます。
  • 現行の認証済みサブジェクトは、 伝搬プロセスに含まれるそれぞれの固有のアプリケーション・サーバーに記録されます。

次のコード・サンプルで、getCallerList API の使用方法を示します。

String[] caller_list = null;

// If security is disabled on this application server, do not check the caller list
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
// Gets the caller_list string array
caller_list = com.ibm.websphere.security.WSSecurityHelper.getCallerList();
}
catch (Exception e)
{
// Performs normal exception handling for your application
}

if (caller_list != null)
{
// Prints out each caller in the list, caller_list[0] is the first caller
for (int i=0; i<caller_list.length;i++)
{
System.out.println("Caller[" + i + "] = " + caller_list[i]);
}
}
}

リストの各呼び出し元のフォーマットは、cell:node_name:server_name:realm:port_number/securityName です。 例えば、出力は次のようになります。myManager:node1:server1:ldap.austin.ibm.com:389/jsmith

デフォルトの伝搬トークンからの最初の呼び出し元の取得

どの認証済み呼び出し元が要求を開始するかを知りたい場合はいつでも、getFirstCaller メソッドを呼び出して、呼び出し元リストを解析することができます。しかしこのメソッドは、 呼び出し元のセキュリティー名を戻すだけです。セキュリティー名以上のことを知りたい場合は、 getCallerList メソッドを呼び出して、ストリング配列の最初のエントリーを 取得します。このエントリーは、呼び出し元のすべての情報を提供します。以下のコード・サンプルでは、 getFirstCaller API により、最初の認証済み呼び出し元のセキュリティー名が取得されます。

String first_caller = null;

// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
// Gets the first caller
first_caller = com.ibm.websphere.security.WSSecurityHelper.getFirstCaller();

// Prints out the caller name
System.out.println("First caller: " + first_caller);
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
}

例えば、出力は次のようになります。jsmith

デフォルトの伝搬トークンからの最初のアプリケーション・サーバー名の取得

この要求に対する最初のアプリケーション・サーバーを知りたいときには、 いつでも getFirstServer メソッドを直接呼び出してください。以下のコード・サンプルでは、 getFirstServer API によって最初のアプリケーション・サーバー名が取得されます。

String first_server = null;

// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
// Gets the first server
first_server = com.ibm.websphere.security.WSSecurityHelper.getFirstServer();

// Prints out the server name
System.out.println("First server: " + first_server);
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
}

例えば、出力は次のようになります。myManager:node1:server1

デフォルトの伝搬トークンへのカスタム属性の追加

アプリケーションで使用するためにカスタム属性をデフォルトの伝搬トークンに追加することができます。 このトークンはダウンストリームの要求に従うので、必要に応じてその属性が利用できます。 属性を追加するためにデフォルトの伝搬トークンを使う場合は、以下の問題を認識しておいてください。
  • 伝搬トークンに情報を追加すると、CSIv2 セッション・キャッシングに影響が出ます。 リモート要求の間に情報を慎重に追加します。
  • 特定のキーで情報を追加した後は、その情報は除去できません。
  • 特定キーに、必要な数だけ値を追加することができます。しかしすべての値は、 それらが追加された順で、戻されたストリング配列から利用できなければなりません。
  • 伝搬トークンは、伝搬とセキュリティーが使用可能になっているサーバーでのみ利用できます。
  • デフォルトの伝搬トークンに属性を追加するためには、 Java 2 セキュリティーの javax.security.auth.AuthPermission wssecurity.addPropagationAttribute 属性が必要です。
  • アプリケーションでは com.ibm.websphere.security または com.ibm.wsspi.security で始まるキーを使えません。これらのプレフィックスは将来 システムで使用するために予約されています。
次のコード・サンプルで、addPropagationAttribute API の使い方を示します。

// If security is disabled on this application server,
     // do not check the status of server security
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
// Specifies the key and values
String key = "mykey";
String value1 = "value1";
String value2 = "value2";

// Sets key, value1
       com.ibm.websphere.security.WSSecurityHelper.
       addPropagationAttribute (key, value1);

// Sets key, value2
String[] previous_values = com.ibm.websphere.security.WSSecurityHelper.
          addPropagationAttribute (key, value2);

// Note: previous_values should contain value1
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
}

getPropagationAttributes アプリケーション・プログラミング・インターフェース (API) を使って属性を検索するには、デフォルトの伝搬トークンからのカスタム属性の取得 を参照してください。

デフォルトの伝搬トークンからのカスタム属性の取得

カスタム属性は、addPropagationAttribute API を使用して、 デフォルトの伝搬トークンに追加されます。これらの属性は、 getPropagationAttributes API を使用して取得します。このトークンはダウンストリームの要求に従うので、 必要に応じてその属性が利用できます。属性を取得するためにデフォルトの伝搬トークンを使用する場合は、 以下の問題を認識しておいてください。
  • 伝搬トークンは、伝搬とセキュリティーが使用可能になっているサーバーでのみ利用できます。
  • デフォルトの伝搬トークンから属性を取得するためには、 Java 2 セキュリティー javax.security.auth.AuthPermission "wssecurity.getPropagationAttributes" 許可が必要です。

次のコード・サンプルで、getPropagationAttributes API の使い方を示します。

// If security is disabled on this application server, do not bother checking
if (com.ibm.websphere.security.WSSecurityHelper.isServerSecurityEnabled())
{
try {
String key = "mykey";
String[] values = null;

// Sets key, value1
       values = com.ibm.websphere.security.WSSecurityHelper.
       getPropagationAttributes (key);

// Prints the values
for (int i=0; i<values.length; i++)
{
System.out.println("Value[" + i + "] = " + values[i]);
}
}
catch (Exception e)
{
// Performs normal exception handling for your application
}
}

例えば、出力は次のようになります。

Value[0] = value1
Value[1] = value2

addPropagationAttribute API を使って属性を追加するには、デフォルトの PropagationToken へのカスタム属性の追加を参照してください。

デフォルトの伝搬トークンに関連付けられているトークン・ファクトリーの変更

WebSphere Application Server は、デフォルトの伝搬トークンを生成する場合、 com.ibm.wsspi.security.token.propagationTokenFactory プロパティーを使用して指定される TokenFactory クラスを 使用します。管理コンソールを使用してこのプロパティーを変更するには、 以下のステップを実行します。
  1. セキュリティー」>「管理、アプリケーション、およびインフラストラクチャーの保護」をクリックします。
  2. 「追加プロパティー」の下の「カスタム・プロパティー」をクリックします。
このプロパティーに指定されるデフォルトのトークン・ファクトリーは、 com.ibm.ws.security.ltpa.AuthzPropTokenFactory と呼ばれます。このトークン・ファクトリーは 伝搬トークンでデータをエンコードしますが、データの暗号化は行いません。伝搬トークンは通常、 Secure Sockets Layer (SSL) を使用して CSIv2 を流れるため、 そのトークンを暗号化する必要はありません。ただし、伝搬トークンに対してそれ以上のセキュリティーが必要な場合は、暗号化を行うために、別のトークン・ファクトリー実装と、このプロパティーを関連付けることができます。 例えば、 com.ibm.ws.security.ltpa.LTPAToken2Factory トークン・ファクトリーとこ のプロパティーを関連付けを選択すると、 トークンは AES 暗号化されます。ただし、セキュリティー・ニーズに対するパフォーマンスへの影響を評価する必要があります。 伝搬トークンに機密情報を追加することは、 トークン・ファクトリー・インプリメンテーションを、 ただエンコードするだけではなく暗号化するものに変更する格好の理由とな ります。
デフォルトの伝搬トークンに対して独自の署名および暗号化を実行する場合は、 以下のクラスをインプリメントする必要があります。
  • com.ibm.wsspi.security.ltpa.Token
  • com.ibm.wsspi.security.ltpa.TokenFactory
トークン・ファクトリー・インプリメンテーションは、 トークン・インプリメンテーションをインスタンス化および検証します。 Lightweight Third Party Authentication (LTPA) 鍵を使用して それをトークン・ファクトリーの initialize メソッドに渡すことも、 あるいは独自の鍵を使用することもできます。 独自の鍵を使用する場合は、これらの鍵を使用して生成されるトークンを検証するために、 どの場所でも同じ鍵を使用する必要があります。 独自のカスタム・トークン・ファクトリーをインプリメントする方法について詳しくは、 インフォメーション・センターのフロントページのリンクから入手可能な API の資料を参照してください。 管理コンソールを使用してトークン・ファクトリーとデフォルトの伝搬トークンを関連付けるには、 以下のステップを実行します。
  1. セキュリティー」>「管理、アプリケーション、およびインフラストラクチャーの保護」をクリックします。
  2. 「追加プロパティー」の下の「カスタム・プロパティー」をクリックします。
  3. com.ibm.wsspi.security.token.propagationTokenFactory プロパティーを探索して、 このプロパティーの値がカスタム・トークン・ファクトリー・インプリメンテーションと一致することを確認します。
  4. 実装クラスが app_server_root/classes ディレクトリーに置かれていて、 WebSphere Application Server クラス・ローダーがそのクラスをロードできることを確認します。
  5. QEJBSVR ユーザー・プロファイルが、classes ディレクトリーに対して、 権限の読み取り、書き込み、および実行 (*RWX) を行ったことを確認します。権限の使用 (WRKAUT) コマンドを使用すると、 そのディレクトリーの権限許可を表示することができます。



関連概念
セキュリティー属性の伝搬
関連タスク
アプリケーション・サーバー間のセキュリティー属性の伝搬
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 7:05:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.iseries.doc/info/iseriesexp/ae/rsec_defproptoken.html