プライマリ・コンテンツに移動
Java Platform, Standard Editionセキュリティ開発者ガイド
リリース10
E94999-01
目次へ移動
目次

前
次
次へ

付録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)がこのエントリを参照するために使用する名前です。このエントリは、ユーザー認証の実行に使用するLoginModulesample.moduleパッケージ内のSampleLoginModuleであること、および認証が成功したと見なされるためにはこのSampleLoginModuleが「成功する」必要があることを示します。SampleLoginModuleは、ユーザーから提供された名前とパスワードが期待したもの(それぞれtestUsertestPassword)である場合にかぎり成功します。

JAAS認証チュートリアルのJAAS認証チュートリアルで説明したように、ログイン構成ファイルのエントリの名前は、LoginContextのインスタンス化時にアプリケーションがエントリの参照に使用する名前です。アプリケーション開発者は、任意の名前を設定できます。ここで、「アプリケーション」とは、JAASログインを実行するあらゆるコードを指します。

指定したLoginModules (後述)は、認証プロセスの制御に使用されます。認証は、Configurationクラスで説明するように、リスト内を指定された正確な順番で下に進みます。

LoginModule固有のエントリ・サブパートを、次に示します。

  • LoginModule: これは、目的の認証技術を実装するクラスを指定します。特に、このクラスは、javax.security.auth.spiパッケージに含まれるLoginModuleクラスのサブクラスでなければなりません。通常、LoginModuleは、これらのチュートリアルで使用するSampleLoginModule (sample.moduleパッケージ内)と同じように、ユーザー名とパスワードを要求し、検証します。どのベンダーの提供するログイン・モジュール実装でも使用可能です。いくつかの実装が、OracleのJREに同梱されています。様々なLoginModuleのリファレンス・ドキュメントを参照できます。すべて、com.sun.security.authパッケージ内にあります。

  • フラグ: フラグ値は、前のLoginModuleの成功がrequiredrequisitesufficientまたはoptionalであるかを示します。チュートリアルのように、存在するLoginModule固有のエントリが1つだけの場合、フラグを「required」にする必要があります。オプションは、Configurationクラスで詳しく説明しています。

  • LoginModuleオプション: 指定されたLoginModule実装でオプションの設定が可能な場合、ここで任意のオプション値を指定できます。空白で区切られた値リストは、基盤となるLoginModuleに直接渡されます。各オプションはLoginModule自身によって定義されており、内部の動作を制御します。たとえば、LoginModuleでデバッグ/テスト機能をサポートするオプションを定義する場合を考えましょう。

    構成ファイルのオプションを指定する適正な方法は、名前-値ペアの使用です(例、debug=true)。オプション名(この場合はdebug)と値(この場合はtrue)は、等号で区切ります。

例6-2 required、sufficient、requisiteおよびoptionalのフラグを説明するログイン構成ファイル

次は、requiredsufficientrequisiteおよび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

SampleLoginModule

required

pass

pass

pass

pass

fail

fail

fail

fail

NTLoginModule

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つのいずれかの方法で指定できます。

  1. コマンド行。

    -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システム・プロパティで単一の等号(=)を使用している場合、このシステム・プロパティおよびjava.securityファイルの両方で指定された構成が使用されます。

  2. 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には、ユーザーの実行するオペレーティング・システムに関係なく、常にスラッシュを使用します。