付録B: JAASログイン構成ファイル
JAAS認証はプラガブルな形式で実行されるため、Javaアプリケーションは、基盤となる認証技術から独立した状態を維持できます。適切な認証技術などの構成情報は実行時に指定されます。構成情報のソース(ファイルやデータベース)は、現在のjavax.security.auth.login.Configuration実装によって異なります。デフォルトのConfiguration
実装ConfigFile
は、その構成情報をログイン構成ファイルから取得します。JAASの提供するデフォルト・ログインConfiguration
実装の詳細は、com.sun.security.auth.login.ConfigFile
クラスを参照してください。
ログイン構成ファイルの構造および内容
ログイン構成ファイルは、1つ以上のエントリで構成され、各エントリには、特定のアプリケーションで使用される基礎となる認証技術が指定されます。各エントリの構造を、次に示します。
<name used by application to refer to this entry> {
<LoginModule> <flag> <LoginModule options>;
<optional additional LoginModules, flags and options>;
};
このため、各ログイン構成ファイルのエントリは、名前、続いて1つ以上のLoginModule固有エントリから構成され、LoginModule固有の各エントリはセミコロンで終わり、LoginModule固有エントリ・グループ全体が中カッコで囲まれます。各構成ファイルのエントリはセミコロンで終わります。
例6-1 JAAS認証チュートリアルのログイン構成ファイル
たとえば、JAAS認証チュートリアルのチュートリアルで使用するログイン構成ファイルには、次のエントリのみが含まれます
Sample {
sample.module.SampleLoginModule required debug=true;
};
ここでは、エントリの名前はSample
で、JAAS認証チュートリアル・アプリケーション(SampleAcn.java
)がこのエントリを参照するために使用する名前です。このエントリは、ユーザー認証の実行に使用するLoginModuleがsample.module
パッケージ内のSampleLoginModule
であること、および認証が成功したと見なされるためにはこのSampleLoginModule
が「成功する」必要があることを示します。SampleLoginModule
は、ユーザーから提供された名前とパスワードが期待したもの(それぞれtestUser
とtestPassword
)である場合にかぎり成功します。
JAAS認証チュートリアルのJAAS認証チュートリアルで説明したように、ログイン構成ファイルのエントリの名前は、LoginContextのインスタンス化時にアプリケーションがエントリの参照に使用する名前です。アプリケーション開発者は、任意の名前を設定できます。ここで、「アプリケーション」とは、JAASログインを実行するあらゆるコードを指します。
指定したLoginModulesは、認証プロセスの制御に使用されます。認証は、Configurationクラスで説明するように、リスト内を指定された正確な順番で下に進みます。
各LoginModule固有のエントリ・サブパートを、次に示します。
-
LoginModule: これは、目的の認証技術を実装するクラスを指定します。特に、このクラスは、
javax.security.auth.spi
パッケージに含まれるLoginModuleクラスのサブクラスでなければなりません。通常、LoginModuleは、これらのチュートリアルで使用するSampleLoginModule
(sample.module
パッケージ内)と同じように、ユーザー名とパスワードを要求し、検証します。どのベンダーの提供するログイン・モジュール実装でも使用可能です。いくつかの実装が、OracleのJDKに同梱されています。様々なLoginModuleのリファレンス・ドキュメントを参照できます。すべて、com.sun.security.auth
パッケージ内にあります。 -
フラグ: フラグ値は、前のLoginModuleの成功が
required
、requisite
、sufficient
またはoptional
であるかを示します。チュートリアルのように、存在するLoginModule固有のエントリが1つだけの場合、フラグを「required」にする必要があります。オプションは、Configurationクラスで詳しく説明しています。 -
LoginModuleオプション: 指定されたLoginModule実装でオプションの設定が可能な場合、ここで任意のオプション値を指定できます。空白で区切られた値リストは、基盤となるLoginModuleに直接渡されます。各オプションはLoginModule自身によって定義されており、内部の動作を制御します。たとえば、LoginModuleでデバッグ/テスト機能をサポートするオプションを定義する場合を考えましょう。
構成ファイルのオプションを指定する適正な方法は、名前-値ペアの使用です(例、
debug=true
)。オプション名(この場合はdebug
)と値(この場合はtrue
)は、等号で区切ります。
例6-2 required、sufficient、requisiteおよびoptionalのフラグを説明するログイン構成ファイル
次は、required
、sufficient
、requisite
およびoptional
フラグを示すサンプル・ログイン構成ファイルです。これらのフラグの詳細は、Configuration
クラスを参照してください。
Login1 {
sample.SampleLoginModule required debug=true;
};
Login2 {
sample.SampleLoginModule required;
com.sun.security.auth.module.NTLoginModule sufficient;
com.foo.SmartCard requisite debug=true;
com.foo.Kerberos optional debug=true;
};
アプリケーションLogin1は、構成済のLoginModule
の、SampleLoginModule
のみを保持します。このため、Login1がサブジェクト(ユーザーまたはサービス)を認証しようとする試みは、SampleLoginModule
が成功した場合にのみ成功します。
アプリケーションLogin2の認証ロジックは、次の表で簡単に説明できます。
表6-1 Login2の認証ステータス
モジュール・クラス | フラグ | 認証の試行1 | 認証の試行2 | 認証の試行3 | 認証の試行4 | 認証の試行5 | 認証の試行6 | 認証の試行7 | 認証の試行8 |
---|---|---|---|---|---|---|---|---|---|
|
required |
pass |
pass |
pass |
pass |
fail |
fail |
fail |
fail |
|
sufficient |
pass |
fail |
fail |
fail |
pass |
fail |
fail |
fail |
SmartCard |
requisite |
* |
pass |
pass |
fail |
* |
pass |
pass |
fail |
Kerberos |
optional |
* |
pass |
fail |
* |
* |
pass |
fail |
* |
全体の認証 |
該当なし |
pass |
pass |
pass |
fail |
fail |
fail |
fail |
fail |
*=前のrequisiteモジュールが失敗するか、または前のsufficientモジュールが成功したため、アプリケーションに制御が返されるので、この値は微妙に変化します。
使用するログイン構成ファイルの位置指定
使用する構成ファイルは、次の2つのいずれかの方法で指定できます。
-
コマンド行。
-Djava.security.auth.login.config
インタプリタ・コマンド行引数を使用して、使用すべきログイン構成ファイルを指定できます。この方法は、すべてのチュートリアルで使用されます。たとえば、JAAS認証チュートリアルでは、SampleAcn
アプリケーションの実行に次のコマンドを使用します。このコマンドは、構成ファイルが現在のディレクトリのsample_jaas.config
ファイルであることを指定します。java -Djava.security.auth.login.config==sample_jaas.config sample.SampleAcn
ノート:
java.security.auth.login.config
システム・プロパティで、(等号を2つ(==
)ではなく)等号を1つ(=
)使用している場合、このシステム・プロパティおよびjava.security
ファイルの両方で指定された構成が使用されます。 -
Javaセキュリティのプロパティ・ファイル。
ログイン構成ファイルの位置を指定する別の方法は、セキュリティ・プロパティ・ファイルの
login.config.url.n
プロパティ値にURLを指定することです。セキュリティ・プロパティ・ファイルは、JDKのconf/security
ディレクトリ内のjava.security
ファイルです。ここで、
n
は1から始まる連番の整数です。このため、必要に応じて複数のログイン構成ファイルを指定できます。この場合、login.config.url.1
プロパティに最初のファイルのURLを、login.config.url.2
プロパティに2番目のファイルのURLというように設定します。複数のログイン構成ファイルを指定する(つまり、n
> 1の場合)、ファイルは読み取られて1つの構成に連結されます。ここで、このチュートリアルで使用する
sample_jaas.config
ログイン構成ファイルを指定するために、セキュリティ・プロパティ・ファイルに追加する必要のある項目の例を示します。この例は、ファイルが次のWindowsのC:\AcnTest
ディレクトリにあると仮定しています。login.config.url.1=file:C:/AcnTest/sample_jaas.config
URLには、ユーザーの実行するオペレーティング・システムに関係なく、常にスラッシュを使用します。