前のチュートリアル チュートリアルの紹介および目次 次のチュートリアル

JAAS Loginユーティリティの使用



前の2つのチュートリアル、「JAAS認証」「JAAS承認」では、LoginContextおよびSubjectクラスを使って次のようなプログラムを作成する方法を紹介しました。

このチュートリアルでは、上記の操作を行なったあと、認証されたユーザーとして指定された任意のアプリケーションを実行するLoginユーティリティについて説明します。

このチュートリアルでは、サンプル・アプリケーションでLoginユーティリティを使用する方法を示します。次のチュートリアルで示す、Java GSS-APIを使用するクライアント/サーバー・アプリケーションも、Loginユーティリティを使用しています。

このチュートリアルを読む前に、JAAS認証および承認に関する、前の2つのチュートリアルを読む必要はありません。ただし、ユーザー・ベースのポリシー・ファイル文の作成方法など、特定のトピックの詳細を知るために、これらのチュートリアル内のセクションを参照することは有用です。また、このチュートリアルを含め、一連のチュートリアルのすべてでログイン構成ファイルを使用するため、「JAASログイン構成ファイル」でその内容を確認しておくこともお勧めします。

一連のチュートリアルすべてで、認証サポートの基盤となる技術としてKerberosを使用しています。「Kerberos要件」を参照してください。

チュートリアルのコードを最初に実行してみる場合、「Loginユーティリティを使用したサンプル・プログラムの実行」を先に読んでから、その他のセクションに戻り、学習を続けてください。

Loginユーティリティに関する重要な情報

Login.javaに含まれるコードについて理解する必要はありません。そのまま使用するだけでかまいません。ただし、プログラム、ポリシー・ファイル、ログイン構成ファイルが正常に動作するように、このコードが実行することについてある程度理解しておく必要があります。次にそのサマリーを示します。それに続くセクションで詳細な情報および例を示します。

Loginクラスは、次の操作を実行します。

アプリケーションおよびほかのファイル要件

Loginユーティリティを使ってユーザーを認証し、アプリケーションを実行するには、ログイン構成ファイルおよびポリシー・ファイルに対し、次のような若干の追加または変更を行う必要があります。

アプリケーション要件

Loginユーティリティは、アプリケーション・コードに特別な変更を加えなくても利用できます。アプリケーションのエントリ・ポイントに必要なのは、通常と同じ、記述するクラスのmainメソッドだけです。

次に、Loginを呼び出してユーザーの認証を行い、MyActionのインスタンス化を実行してアプリケーションを呼び出す方法を示します。

java <options> Login <AppName> <app arguments> 
ここで、<AppName>にはアプリケーションのトップレベル・クラスの名前、<app arguments>にはアプリケーションが必要とする引数を指定します。このチュートリアルで使用するすべてのコマンドについては、「Loginユーティリティを使用したサンプル・プログラムの実行」を参照してください。

ログイン構成ファイル要件

ユーザーの認証にLoginContextを使用する場合は、ログイン構成ファイルを使用して、使用するログイン・モジュールを指定する必要があります。ログイン構成ファイルおよびその内容の詳細は、JAAS認証チュートリアルの「ログイン構成ファイル」セクションを参照してください。

Loginユーティリティを使用する場合、ログイン構成ファイルのエントリ名が、トップ・レベルのアプリケーション・クラス名と正確に一致する必要があります。具体例は、このチュートリアルの「ログイン構成ファイル」を参照してください。

ポリシー・ファイル要件

セキュリティ・マネージャを使用してアプリケーションを実行する場合は、常に特定のコード(特定のユーザーにより実行される特定のコード)に付与するアクセス権を示すポリシーが必要です。ポリシーを指定する1つの方法は、ポリシー・ファイルのgrant文を使用することです。詳細については、「ポリシー・ファイル」を参照してください。

Loginユーティリティを使ってアプリケーションを起動する場合は、「LoginおよびMyActionクラスに必要なアクセス権」の説明に従ってさまざまなアクセス権を付与する必要があります。

サンプル・アプリケーション・プログラム

このチュートリアルで使用するSample.javaアプリケーションが実行するアクションは、前の(「JAAS承認」)チュートリアルのSampleAction.javaアプリケーションのアクションと同じです。次を実行します。

次に、コードを示します。

import java.io.File;

public class Sample {

  public static void main (String[] args) throws SecurityException {

    // If there were any arguments to read, we'd do it here.

    System.out.println("\nYour java.home property value is: "
                +System.getProperty("java.home"));

    System.out.println("\nYour user.home property value is: "
                +System.getProperty("user.home"));

    File f = new File("foo.txt");
    System.out.print("\nfoo.txt does ");
    if (!f.exists())
        System.out.print("not ");
    System.out.println("exist in the current working directory.");
  }
}

ログイン構成ファイル

このチュートリアルのsample.confログイン構成ファイルには、前の(「JAAS承認」)チュートリアルのログイン構成ファイルと同様、単一のエントリが含まれます。どちらの場合も、使用するアプリケーション技術がcom.sun.security.auth.moduleパッケージのKrb5LoginModuleであるため、エントリの内容は同じになります。

唯一の違いは、エントリに使用する名前です。前のチュートリアルでは、「JaasSample」という名前を使用しました。これは、JaasAznクラスがエントリの照合にこの名前を使用するためです。アプリケーションでLoginユーティリティを使用する場合、Loginユーティリティはログイン構成ファイルのエントリ名がトップ・レベルのアプリケーション・クラスの名前と同じであると見なします。このチュートリアルで使用するアプリケーション・クラスの名前は「Sample」であるため、ログイン構成ファイルのエントリもこの名前にする必要があります。このため、ログイン構成ファイルは次のようになります。

Sample {
   com.sun.security.auth.module.Krb5LoginModule required;
};

「required」は、認証が成功したと見なされるためには、Krb5LoginModuleを使用するログインが「成功」する必要があることを示します。Krb5LoginModuleが成功するのは、ユーザーが入力した名前およびパスワードを使用して、Kerberos KDCへのログインに成功した場合だけです。

Krb5LoginModuleに引渡し可能なすべてのオプションの詳細は、Krb5LoginModuleドキュメントを参照してください。

ポリシー・ファイル

Login、MyAction、およびSampleクラスはすべてセキュリティ関連操作を実行するため、操作を実行するには、ポリシー・ファイル内に関連するアクセス権を指定する必要があります。

LoginおよびMyActionクラスに必要なアクセス権

このチュートリアルでは、Login.classファイルとMyAction.classファイルを含むLogin.jar JARファイルを作成します。Login.jarには様々なアクセス権を付与する必要があります。特に、Login.jarのクラスによって呼び出されるセキュリティ保護の必要なメソッドを呼び出すアクセス権と、アプリケーションが必要とするアクセス権は必須です。そうでない場合、アクセス制御チェックは失敗します。

もっとも簡単な方法である、Login.jar AllPermissionを付与する方法をお薦めします。このチュートリアルでは、Login.jarファイルは現在のディレクトリ内にあり、ポリシー・ファイルには次が含まれるものとします。

grant codebase "file:./Login.jar" {
   permission java.security.AllPermission;
};

Sampleに必要なアクセス権

(注: このセクションは、基本的に前の(「JAAS承認」)チュートリアルの「SampleActionに必要なアクセス権」セクションを変更したものです。SampleとSampleActionが実行する操作は同じであるため、必要なアクセス権も同じになります。)

Sampleコードは、アクセス権の必要な3つの操作を実行します。次のとおりです。

これらの操作には、次のアクセス権が必要です。

permission java.util.PropertyPermission "java.home", "read";
permission java.util.PropertyPermission "user.home", "read";
permission java.io.FilePermission "foo.txt", "read";

これらのアクセス権をSample.class内のコードに付与する必要があります。このファイルは、Sample.jarという名前のJARファイル内に配置されます。ただし、grant文は、アクセス権をコードだけではなく、コードを実行する認証済の特定ユーザーにも付与します。これは、grant文のPrincipal指示部を使用して、コード内のセキュリティ関連操作に必要なアクセス権を、コードを実行するすべてのユーザーに付与するのではなく、特定のユーザーに制限する方法を示します。

このため、「プリンシパルベースのポリシー・ファイル文の作成方法」で説明したように、grant文は次のようになります。

grant codebase "file:./Sample.jar",
    Principal javax.security.auth.kerberos.KerberosPrincipal 
        "your_user_name@your_realm"  {

   permission java.util.PropertyPermission "java.home", "read";
   permission java.util.PropertyPermission "user.home", "read";
   permission java.io.FilePermission "foo.txt", "read";
};
重要: 「your_user_name@your_realm」には、使用するKerberosユーザー名、「@」、およびレルムを指定する必要があります。たとえば、ユーザー名が「mjones」、レルムが「KRBNT-OPERATIONS.ABC.COM」の場合、"mjones@KRBNT-OPERATIONS.ABC.COM" (引用符も付ける)を指定します。

完全なポリシー・ファイル

完全なポリシー・ファイルは、sample.policyです。

Loginユーティリティを使用したサンプル・プログラムの実行

Loginユーティリティを使用してSampleアプリケーションを実行するには、次の操作を実行します。

  1. 次のファイルを1つのディレクトリ内に格納します。
  2. sample.policy内の「your_user_name@your_realm」を、実際のユーザー名およびレルムで置き換えます。
  3. Login.javaSample.javaをコンパイルします。
    javac Login.java Sample.java
    

    Login.javaには2つのクラスが含まれるため、Login.javaをコンパイルするとLogin.classおよびMyAction.classが生成されます。

  4. Login.class and MyAction.classを含むLogin.jarという名前のJARファイルを作成します。
    jar -cvf Login.jar Login.class MyAction.class
    
  5. Sample.classを含むSample.jarという名前のJARファイルを作成します。
    jar -cvf Sample.jar Sample.class
    
  6. 次を指定して、Loginクラスを実行します。
    • 適切な-classpath節(Login.jarおよびSample.jar JARファイル内のクラスを検索するため)。
    • -Djava.security.manager。セキュリティ・マネージャのインストールを指定します。
    • -Djava.security.krb5.realm=<your_realm> (使用するKerberosレルム)。
    • -Djava.security.krb5.kdc=<your_kdc> (使用するKerberos KDC)。
    • -Djava.security.policy=sample.policy。使用するポリシー・ファイルとしてsample.policyを指定します。
    • -Djava.security.auth.login.config=sample.conf。使用するログイン構成ファイルとしてsample.confを指定します。

    Loginの引数として、アプリケーションの名前(ここでは「Sample」)を渡します。次に、アプリケーションに必要な任意の引数を追加します。ただし、ここではSampleには何も追加する必要はありません。

    次に、Microsoft WindowsおよびSolaris、LinuxおよびMac OS Xシステムで使用するすべてのコマンドを示します。classpath項目の区切りとして、Solaris、LinuxおよびMac OS Xシステムではコロンを使用するのに対し、Windowsシステムではセミコロンを使用する点のみが異なります。<your_realm>をKerberosレルムと、<your_kdc>をKerberos KDCと置き換えてください。

    次にWindowsシステムの全コマンドを示します。

    java -classpath Login.jar;Sample.jar 
     -Djava.security.manager 
     -Djava.security.krb5.realm=<your_realm> 
     -Djava.security.krb5.kdc=<your_kdc> 
     -Djava.security.policy=sample.policy 
     -Djava.security.auth.login.config=sample.conf Login Sample
    

    次に、Solaris、LinuxおよびMac OS Xシステムのすべてのコマンドを示します。

    java -classpath Login.jar:Sample.jar 
     -Djava.security.manager 
     -Djava.security.krb5.realm=<your_realm> 
     -Djava.security.krb5.kdc=<your_kdc> 
     -Djava.security.policy=sample.policy 
     -Djava.security.auth.login.config=sample.conf Login Sample
    

    コマンド全体を1行で入力してください。ここでは、読みやすくするために複数行に分けて表示してあります。システムでコマンドが長すぎる場合は、.batファイル(Windowsの場合)または.shファイル(Solaris、LinuxおよびMac OS Xの場合)にそれを入れる必要がある場合があります。このファイルを実行することで、コマンドを実行できます。

    Kerberosユーザー名とパスワードの入力が求められます。ログイン構成ファイルで指定された、基盤となるKerberosログイン・モジュールにより、Kerberosへのログインが行われます。認証が成功すると、Sampleのコードがユーザーに代わって実行されます。ポリシー・ファイルsample.policyにより、ユーザーには必要なアクセス権が付与されるため、java.homeおよびuser.homeシステム・プロパティの値、およびfoo.txtという名前のファイルが現在のディレクトリに存在するかどうかに関する文が表示されます。

    ログイン時のトラブルシューティングについては、「トラブルシューティング」を参照してください。



前のチュートリアル チュートリアルの紹介および目次 次のチュートリアル

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.