セキュリティー属性の伝搬 により、WebSphere Application Server は、セキュリティー属性 (認証済みサブジェクト内容およびセキュリティー・コンテキスト情報) を、 構成内のサーバー間でトランスポートできます。 WebSphere Application Server は、これらのセキュリティー属性を、 静的属性を照会するエンタープライズ・ユーザー・レジストリーか、 静的または動的属性を照会できるカスタム・ログイン・モジュールかのいずれかから取得します。 現実にカスタムである動的セキュリティー属性には、 接続に使用される認証強度、元の呼び出し元の ID、元の呼び出し元の場所、 元の呼び出し元の IP アドレスなどがあります。
セキュリティー属性の伝搬は、Java シリアライゼーションを使用して、 サブジェクト内に格納されているすべてのオブジェクトに伝搬サービスを提供します。 ただし、Java コードでこれらのオブジェクトをシリアライズおよびデシリアライズできる必要があります。 Java プログラム言語では、Java コードでオブジェクトをシリアライズする方法の規則が指定されています。 プラットフォームやバージョンが異なるソフトウェアを扱う際に問題が起きる場合もあるため、 WebSphere Application Server には、 カスタム・シリアライゼーション機能を使用可能にするトークン・フレームワークも用意されています。 トークン・フレームワークには、これ以外の利点も含まれていますが、 その中にはトークンの固有性を識別する機能もあります。 この固有性により、サブジェクトをキャッシュに入れる方法、 およびトークンの目的が判別されます。 トークン・フレームワークは、4 つの マーカー・トークン・インターフェースを定義します。 これにより、WebSphere Application Server ランタイムが トークンを伝搬する方法を決定できます。
WebSphere Application Server バージョン 6.0 以降では、 Java 2 Platform, Enterprise Edition (J2EE) アプリケーションに対してアクセス制御を実行するよう、 カスタム Java Authorization Contract for Container (JACC) プロバイダーを 構成できます。カスタム JACC プロバイダーは、アクセス制御の決定において、呼び出し側の JAAS サブジェクト内のカスタム・セキュリティー属性を探索できます。
要求の認証中に、この要求がイニシャル・ログイン または伝搬ログイン のいずれであるかが、ログイン・モジュールによって判別されます。 イニシャル・ログインは、ユーザー情報、特にユーザー ID とパスワードを認証するプロセスであり、 ユーザー・アクセス権を表すセキュア属性をルックアップするための、 リモート・ユーザー・レジストリーのアプリケーション・プログラミング・インターフェース (API) を呼び出します。伝搬ログインの プロセスでは、ユーザー情報、特に Lightweight Third Party Authentication (LTPA) トークンを妥当性検査した後、WebSphere Application Server に既知のカスタム・オブジェクトとトークン・フレームワーク・オブジェクト の両方で構成される一連のトークンをデシリアライズします。
また、Cookie を使用するときは常に、 Secure Sockets Layer (SSL) プロトコルを使用して要求を保護することを推奨します。 SSO トークンを使用すると、Web ユーザーは、 複数の WebSphere Application Server を介して Web リソースにアクセスする際に、 一度だけ認証を受ければよいことになります。 カスタム SSO トークンは、カスタム処理をシングル・サインオン・シナリオに追加することによって、この機能を拡張します。 SSO トークンの詳細については、 Web ユーザー認証を最小化するためのシングル・サインオンのインプリメント を参照してください。 このトークン・タイプの使用とインプリメントの方法についての詳細は、 例: デフォルトのシングル・サインオン・トークンの使用 およびカスタム・シングル・サインオン・トークンのインプリメント を参照してください。
デフォルトの伝搬トークンは、 すべてのユーザー・スイッチおよびホスト・スイッチをモニターしてログに記録します。 ユーザーは、WSSecurityHelper アプリケーション・プログラミング・インターフェース (API) を使用して、 追加情報をデフォルトの伝搬トークンに追加できます。 伝搬トークンのカスタム・インプリメンテーションを検索および設定するには、 WSSecurityPropagationHelper クラスを使用できます。 このトークン・タイプの使用とインプリメントの方法についての詳細は、 例: デフォルトの伝搬トークンの使用 およびカスタム伝搬トークンのインプリメント を参照してください。
カスタム認証トークンは、 それをサブジェクトに追加するサービス・プロバイダーの目的のためだけに使用されます。 デフォルトの認証トークンが存在し、WebSphere Application Server 認証のために使用されるので、WebSphere Application Server が、 認証目的でカスタム認証トークンを使用することはありません。サービス・プロバイダーは、このトークン・タイプを使用して、 カスタム・データによるトークンの使用法を識別し、カスタム認証決定を実行することができます。このトークン・タイプの使用とインプリメントの方法についての詳細は、 デフォルトの認証トークン およびカスタム認証トークンのインプリメント を参照してください。
WebSphere Application Server では、Web 要求のシングル・サインオンを使用する水平伝搬、およびエンタープライズ Bean にアクセスするために Remote Method Invocation over the Internet Inter-ORB Protocol (RMI/IIOP) を使用するダウンストリーム伝搬の両方が使用可能です。
水平伝搬では、 セキュリティー属性は、フロントエンド・サーバー間で伝搬されます。サブジェクトの内容および伝搬トークンであるシリアライズされたセキュリティー属性は、静的属性と動的属性の両方を含むことができます。 シングル・サインオン (SSO) トークンは、水平伝搬に必要な追加のシステム固有情報を保管します。 SSO トークンに含まれる情報は、 発信サーバーの場所、およびそのサーバーとの通信方法を受信サーバーに知らせます。 さらに、SSO トークンはシリアライズされた属性をルックアップする鍵も含んでいます。 水平伝搬を使用可能にするためには、シングル・サインオン・トークンおよび Web インバウンド・セキュリティー属性伝搬フィーチャーを構成する必要があります。 管理コンソールを使用して、これらのフィーチャーの両方を構成することができます。
フロントエンド・サーバーが 同じデータ複製サービス (DRS) の複製ドメインで構成されると、 シリアライズされた情報が、 アプリケーション・サーバーによって、 同じドメイン内のすべてのサーバーに自動的に伝搬されます。 図 1 では、アプリケーション 1 がサーバー 1 およびサーバー 2 にデプロイされ、 両方のサーバーが同じ DRS 複製ドメインのメンバーです。 要求がサーバー 1 のアプリケーション 1 から発信され、サーバー 2 のアプリケーション 1 にリダイレクトされると、 元のログイン属性は追加のリモート要求なしでサーバー 2 で検出されます。
図 1
DRS または JMX リモート呼び出しの パフォーマンスへの影響はご使用の環境に依存します。 DRS または JMX リモート呼び出しは、 元のログイン属性を取得するのに使用されます。 リモート・ユーザー・レジストリー呼び出しが、ほとんどのアプリケーション・パフォーマンス上の問題を起こしている場合は、水平伝搬がその呼び出しの多くを減らします。 ただし、これらのオブジェクトのデシリアライゼーションもパフォーマンスの低下の原因となっている可能性がありますが、 この低下はリモート・ユーザー・レジストリー呼び出しによるものよりは小さいことがあります。 水平伝搬を使用可能や使用不可にして、ご使用の環境をテストしてみることをお勧めします。 元のログイン属性を保存するために水平伝搬を使用する必要がある場合は、 DRS または JMX がご使用の環境に良いパフォーマンスを提供するかどうかをテストしてください。 通常、フェイルオーバーおよびパフォーマンス上の理由のために、DRS を構成することをお勧めします。 ただし、DRS は同じ複製ドメインのすべてのサーバーに対して (サーバーのアクセス状況に関する) 情報を伝搬するため、 あまりに多くのサーバーが同じ複製ドメインにある場合は、パフォーマンスが低下する可能性があります。 この場合、複製ドメインのサーバー数を減らすか、DRS 複製ドメインのサーバーを構成しないでください。 後者の場合は、必要に応じて、JMX リモート呼び出しが属性を検索し、全体的に早くなる可能性があります。
ダウンストリーム伝搬 では、 サブジェクトは、Web フロントエンド・サーバーにおいて、 伝搬ログインまたはユーザー・レジストリー・ログインのいずれかで生成されます。 Remote Method Invocation (RMI) のアウトバウンド伝搬とインバウンド伝搬が両方とも使用可能になっている場合、 WebSphere Application Server は、エンタープライズ Bean を呼び出すためのセキュリティー情報をダウンストリームに伝搬します。
WebSphere Application Server のセキュリティー属性の伝搬機能には、 以下の利点があります。
WebSphere Application Server による、 認証と許可のためのセキュリティー属性情報の使用を可能にします。 セキュリティー属性の伝搬は、 呼び出しに伴う個々のリモート・ホップでのユーザー・レジストリー呼び出しの必要性を除去することができます。 WebSphere Application Server のこれまでのバージョンは、 認証済みユーザーのユーザー名だけを伝搬しましたが、 リモート・ユーザー・レジストリー・コールを使用してダウンストリームに再生成が必要だった他のセキュリティー属性情報は無視しました。 この新規機能の利点を際立たせるために、次の例を考えてみます。
これまでのリリースでは、WebSEAL などのリバース・プロキシー・サーバー (RPSS) を使用して、ユーザーの認証、グループ情報の収集、および他のセキュリティー属性の収集を行いました。 既に説明しているように、WebSphere Application Server は、 認証済みユーザーの ID を受け入れましたが、その他のセキュリティー属性情報を無視しました。 必要な WSCredential および WSPrincipal オブジェクトを格納している Java Authentication and Authorization Service (JAAS) サブジェクトを作成するため、 WebSphere Application Server は、 ユーザー・レジストリーに 5 回から 6 回の呼び出しを行いました。 WSCredential オブジェクトは、 J2EE リソースを許可するために必要なさまざまなセキュリティー情報を格納しています。 WSPrincipal オブジェクトは、サブジェクトのプリンシパルを表すレルム名とユーザーを格納しています。
Application Server の現行リリースでは、 リバース・プロキシー・サーバーから得られた情報は、WebSphere Application Server で使用して、ユーザー・レジストリーへの追加の呼び出しを行うことなく、 他のサーバー・リソースへのダウンストリームに伝搬できます。 セキュリティー属性情報を保持していると、 適切な許可およびトラスト・ベースの決定を行うことにより、 サーバー・リソースを適切に保護することができます。 J2EE RunAs 構成により起きるユーザー・スイッチは、 アプリケーション・サーバーが元の呼び出し元情報を失う原因とはなりません。 この情報は、実行スレッド上にある PropagationToken に保管されます。