このトピックを使用して、Java Authentication and Authorization Service によるプログラマチック・ログインを開発します。
始める前に
Java Authentication and Authorization Service (JAAS) は、認証用の
戦略的アプリケーション・プログラミング・インターフェース (API) を表します。
JAAS は、
Common Object Request Broker Architecture (CORBA) プログラマチック・ログイン・アプリケーション・プログラミング・インターフェース (API) に置き換わるものです。
WebSphere Application Server は、JAAS に次のような拡張機能を提供します。
- サーバー上のリモート・リソースにアクセスするためのシン・クライアント・アプリケーション環境の
セットアップ方法についての詳細は、CosNaming (CORBA ネーミング・インターフェース) を使用するアプリケーションの開発
の項目を参照してください。
- アプリケーションがカスタム JAAS ログイン構成を使用する場合は、JAAS ログイン構成が正しく定義されていることを確認します。
詳しくは、Java Authentication and Authorization Service のプログラマチック・ログインの構成
を参照してください。
- 一部の JAAS API は、Java 2 セキュリティー許可によって保護されています。
これらの API
をアプリケーション・コードで使用する場合は、これらのアクセス権がアプリケーションの was.policy
ファイルに追加されていることを確認してください。
詳しくは、以下の項目を参照してください。
Java 2 セキュリティー権限で保護される API に
ついては、IBM Developer Kit の Java Technology Edition で、
セキュリティー: 学習用リソース
の
JAAS および WebSphere Application Server のパブリック API の資料を参照してください。
この資料のサンプル・コードで使用される API の一部、およびこれらの
API によって要求される Java 2 セキュリティー権限を以下のリストに示します。
- javax.security.auth.login.LoginContext コンストラクターは、javax.security.auth.AuthPermission の "createLoginContext" オブジェクトで保護されています。
- javax.security.auth.Subject.doAs および com.ibm.websphere.security.auth.WSSubject.doAs メソッドは、javax.security.auth.AuthPermission の "doAs" オブジェクトで保護されています。
- javax.security.auth.Subject.doAsPrivileged および com.ibm.websphere.security.auth.WSSubject.doAsPrivileged メソッドは、javax.security.auth.AuthPermission の "doAsPrivileged" オブジェクトで保護されています。
- 許可検査用 Java 2 Platform, Enterprise Edition (J2EE) リソースに対する拡張モデル。
JAAS バージョン 1.0 の設計上のミスにより、javax.security.auth.Subject.getSubject メソッドは、
java.security.AccessController.doPrivileged コード・ブロック内の実行スレッドに
関連付けられているサブジェクトを戻しません。このミスのため、矛盾した振る舞いが発生し、望ましくない影響を受ける可能性があります。
com.ibm.websphere.security.auth.WSSubject クラスは、サブジェクトを実行スレッドに関連付ける予備手段を提供します。
com.ibm.websphere.security.auth.WSSubject クラスは、許可検査のために、JAAS モデルを Java 2 Platform, Enterprise Edition (J2EE) リソースに拡張します。
サブジェクトが com.ibm.websphere.security.auth.WSSubject.doAs メソッド内の実行スレッドと関連付けられる場合、または
com.ibm.websphere.security.auth.WSSubject.doAsPrivileged コード・ブロックが製品の証明書を含む場合、サブジェクトは
J2EE リソースの許可検査のために使用されます。
- 新規 JAAS ログイン構成の定義におけるユーザー・インターフェース・サポート。
JAAS ログイン構成は、管理コンソールで構成して、構成リポジトリーに保管することができます。アプリケーションは、管理コンソールで新規 JAAS ログイン構成を定義でき、
データは構成リポジトリーで永続化されます。
しかし、WebSphere Application Server は現在でも、JAAS のデフォルト・インプリメンテーションが提供するデフォルトの JAAS ログイン構成フォーマット (プレーン・テキスト・ファイル) をサポートしています。
重複ログイン構成が構成リポジトリーとプレーン・テキスト・ファイル・フォーマットの両方で定義されている場合は、リポジトリーで定義された構成が優先されます。
ログイン構成を構成リポジトリーで定義することには、次のような利点があります。
- JAAS ログイン構成を定義する際に、管理コンソールがサポートされます。
- JAAS ログイン構成の集中管理
- JAAS ログイン構成の配布
- プログラマチック認証を行うアプリケーション・サポート。
WebSphere Application Server は、アプリケーションが
Websphere セキュリティー・ランタイムに対してプログラマチック認証を行うための
JAAS ログイン構成を提供しています。これらの構成は、Websphere Application Server によって構成された認証メカニズム
(Simple WebSphere Authentication Mechanism (SWAM) または Lightweight Third Party Authentication (LTPA))
および提供される認証データに基づくユーザー・レジストリー (ローカル OS、Lightweight Directory Access Protocol (LDAP)、カスタム・レジストリー、またはフェデレーテッド・リポジトリー) に対して認証を行います。これらの JAAS ログイン構成で認証されたサブジェクトには、Websphere
セキュリティー・ランタイムが J2EE 役割ベースの保護リソースに対して許可検査を実行するのに必要なプリンシパルおよびクレデンシャルが含まれています。
注: SWAM は WebSphere Application Server バージョン 6.1 では
推奨されません。また将来のリリースでは除去される予定です。
以下に、WebSphere Application Server が提供する JAAS ログイン構成を示します。
- ユーザー定義 JAAS ログイン構成。
上記以外の JAAS ログイン構成を
定義して、クライアント・プロセスまたはサーバー・プロセスでカスタム・サブジェクトを作成する
プログラマチック・ログインを実行することができます。本製品のセキュリティー・ランタイムの
サブジェクトを、プロトコル経由でクライアントから認証情報を送信したり、
サーバー上で許可を処理したりするために使用するには、
特定のクレデンシャルとプリンシパルが必要です。必要なクレデンシャルは、
提供されているログイン・モジュールから生成されます。
Pure Java クライアントのログインに必要な
ログイン・モジュールは次のとおりです。
- com.ibm.ws.security.common.auth.module.WSLoginModuleImpl (必須);
使用されるコールバック・ハンドラーでは、このログイン・モジュールを使用できるほか、
以下のコールバック・クラスも処理できなければなりません。
- javax.security.auth.callback.NameCallback
- javax.security.auth.callback.PasswordCallback
コールバック・ハンドラーではユーザー名とパスワードを指定する必要があります。
クライアント・サイドのサブジェクトに追加されるカスタム・クラスは、
セキュリティー属性の伝搬が使用可能になっていれば、常に自動でサーバーに
伝搬されるはずです。Pure Java クライアントで伝搬を使用可能にする方法については、
アプリケーション・サーバー間のセキュリティー属性の伝搬
の該当するステップを参照してください。
注: 正しくこの状態になるためには、サブジェクトに追加されるクラスが Java シリアライズ可能かつデシリアライズ可能で
なければなりません。
- Pure Java クライアントでのプログラマチック・ログインのネーミング要件。
Pure Java クライアント上でプログラマチック・ログインが行われ、
プロパティー com.ibm.CORBA.validateBasicAuth が true である場合は、
SecurityServer がどこにあるかをセキュリティー・コードで認識している必要があります。
通常、java.naming.provider.url プロパティーがシステム・プロパティーとして設定されている場合、あるいはそのプロパティーが jndi.properties ファイルで設定されている場合は、デフォルトの InitialContext で十分です。
それ以外の場合は、システム全体で同じ java.naming.provider.url プロパティーを
設定することは望ましくありません。
この場合は、sas.client.props ファイルで、セキュリティー固有のブートストラップ情報を指定する必要があります。
以下は、Pure Java クライアントで SecurityServer を検出する方法を決定する場合の優先順位を示しています。
注: z/OS サーバーに接続する場合は、
必ず com.ibm.CORBA.validateBasicAuth=false と設定してください。
この関数は、現在分散クライアントから z/OS サーバーに対しては機能しません。
それは、SecurityServer が UNAUTHENTICATED のプリンシパルを使用して配置されており、それが z/OS システムでは受け入れられないためです。