ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティのプログラミング
11g リリース1(10.3.6)
B61619-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

4 JavaクライアントでのJAAS認証の使用

この節では、以下の内容について説明します。

これらの節で参照するサンプル・コードは、WebLogic Server配布キットの次の場所から入手できます。

SAMPLES_HOME\server\examples\src\examples\security\jaas

jaasディレクトリには、instructions.htmlファイル、antビルド・ファイル、sample_jaas.configファイル、および以下のJavaファイルが含まれています。

以降の説明は、実際のサンプルを見ながら読み進めてください。

JAASとWebLogic Server

Java Authentication and Authorization Service (JAAS)は、Java EE Development Kit 5.0のセキュリティに対する標準拡張です。JAASでは、ユーザーのIDに基づいてアクセス制御を実行できます。JAASは、JNDI認証メカニズムのかわりとしてWebLogic Serverで提供されています。

WebLogic Serverクライアントは、標準のJAASの認証部分だけを利用します。JAAS LoginContextは、構成されているすべての認証プロバイダのLoginModuleインスタンスを順番どおりに実行し、構成されている各プロバイダの完了ステータスの管理を行います。

Javaクライアントに対してJAAS認証を使用する場合は、次のことに注意してください。

JAASの詳細は、JAASドキュメント(http://www.oracle.com/technetwork/java/javase/jaas/index.html)を参照してください。

JAAS認証の開発環境

クライアントがアプリケーション、アプレット、Enterprise JavaBeans (EJB)、または認証が必要なサーブレットのどれであるかに関係なく、WebLogic ServerはJAASのクラスを使用して安全かつ確実にそのサーバーに対して認証を行います。JAASは、プラガブル認証モジュール(PAM)フレームワークのJavaバージョンを実装します。このフレームワークにより、アプリケーションは基底の認証技術から独立することができます。このため、PAMフレームワークを利用することで、Javaアプリケーションに修正を加えることなく新しいまたは最新版の認証技術を使用することができます。

WebLogic Serverは、リモートのJavaクライアントの認証および内部の認証でJAASを使用します。したがって、JAASに直に関与する必要があるのは、カスタム認証プロバイダの開発者とJavaクライアント・アプリケーションの開発者だけです。Webブラウザ・クライアントのユーザーまたはコンテナ内のJavaクライアント・アプリケーション(サーブレットからEJBを呼び出すものなど)の開発者は、JAASを直接使用したり、その知識を身につけたりする必要はありません。


注意:

WebLogicクライアントでセキュリティを実装するためには、JavaクライアントでWebLogic Serverソフトウェア配布キットをインストールする必要があります。

この節では、以下の内容について説明します。

JAAS認証API

WebLogic ServerでJAAS認証を使用するJavaクライアントを実装するには、Java EE アプリケーション・プログラミング・インタフェース(API)とWebLogic APIを組み合せて使用します。

表4-1では、JAAS認証の実装に使用されるJava APIパッケージについて説明します。表4-1の情報はJava APIのドキュメントから取られており、WebLogic Server固有の情報がコメントで追加されています。Java APIの詳細は、http://download.oracle.com/javase/6/docs/api/index.htmlおよびhttp://download.oracle.com/javaee/6/api/のJavadocを参照してください。

表4-1では、JAAS認証の実装に使用されるWebLogic APIについて説明します。詳細については、WebLogicクラスのJavadocを参照してください。

表4-1 Java JAAS API

Java JAAS API 説明

javax.security.auth.Subject(http://download.oracle.com/javase/6/docs/api/index.html)

Subjectクラスは、リクエストのソースを表し、個々のユーザーでもグループでも使用できます。Subjectオブジェクトは、サブジェクトのログインが正常に完了した後でのみ作成されます。

javax.security.auth.login.LoginContext(http://download.oracle.com/javase/6/docs/api/index.html)

LoginContextクラスは、Subjectの認証に使用される基本メソッドを記述し、基底の認証テクノロジから独立したアプリケーションを開発する方法を提供します。Configurationでは、特定のアプリケーションで使用する認証テクノロジまたはLoginModuleを指定します。したがって、アプリケーション自体を変更せずに、異なるLoginModuleをアプリケーションに組み込むことができます。

呼出し側は、LoginContextをインスタンス化した後、loginメソッドを呼び出してSubjectを認証します。このloginメソッドは、呼出し側で指定した名前について構成されたLoginModuleの各々からのloginメソッドを呼び出します。

loginメソッドが例外をスローすることなく返れば、認証は総合的に成功したことになります。呼出し側はその後、getSubjectメソッドを呼び出すことによって、新しく認証されたSubjectを取得できます。Subjectと関連付けられたプリンシパルおよび資格証明は、SubjectgetPrincipalsgetPublicCredentials、およびgetPrivateCredentialsメソッドをそれぞれ呼び出すことで取得できます。

Subjectをログアウトさせるには、呼出し側がlogoutメソッドを呼び出します。loginメソッドの場合と同じく、このlogoutメソッドはこのLoginContextについて構成された各LoginModuleに対しlogoutメソッドを呼び出します。

このクラスの実装サンプルについては、例4-3を参照してください。

javax.security.auth.login.Configuration(http://download.oracle.com/javase/6/docs/api/index.html)

これは、アプリケーションにおけるLoginModuleの構成を表す抽象クラスです。Configurationでは、特定のアプリケーションについて、使用するLoginModule、およびLoginModuleを呼び出す順番を指定します。この抽象クラスは、実際の構成を読み取ってロードする実装を提供するようサブクラス化する必要があります。

WebLogic Serverでは、このクラスのかわりにログイン構成ファイルを使用します。サンプルの構成ファイルについては、例4-2を参照してください。デフォルトでは、WebLogic Serverは構成ファイルから読取りを行う構成クラスを使用します。

javax.security.auth.spi.LoginModule(http://download.oracle.com/javase/6/docs/api/index.html)

LoginModuleは、認証テクノロジ・プロバイダによって実装されるインタフェースを記述します。LoginModuleは、特定のタイプの認証を提供するためにアプリケーションに組み込まれます。

アプリケーション開発者はLoginContext APIに書き込み、API認証テクノロジ・プロバイダはLoginModuleインタフェースを実装します。Configurationでは、特定のログイン・アプリケーションで使用するLoginModuleを指定します。したがって、アプリケーション自体を変更せずに、異なるLoginModuleをアプリケーションに組み込むことができます。

注意: WebLogic Serverは、LoginModuleの実装(weblogic.security.auth.login.

UsernamePasswordLoginModuleです)を提供します。WebLogic ServerのJavaクライアントでは、このJAAS認証の実装の使用が望ましいですが、独自のLoginModuleを開発することも可能です。

javax.security.auth.

callback.Callback(http://download.oracle.com/javase/6/docs/api/index.html)

このインタフェースの実装はCallbackHandlerに渡されます。それにより、基底のセキュリティ・サービスは呼出し側アプリケーションと対話して、ユーザー名やパスワードなど特定の認証データを取得したり、エラーや警告メッセージなど特定の情報を表示できるようになります。

Callback実装では、基底のセキュリティ・サービスによってリクエストされた情報の取得または表示は行いません。Callback実装は、単にそのようなリクエストをアプリケーションに渡す手段と、アプリケーションがリクエストされた情報を基底のセキュリティ・サービスに返す手段を提供します。

javax.security.auth.

callback.CallbackHandler(http://download.oracle.com/javase/6/docs/api/index.html)

アプリケーションは、CallbackHandlerを実装し、それを基底のセキュリティ・サービスに渡すことで、それらのサービスがアプリケーションと対話してユーザー名やパスワードなど特定の認証データを取得したり、エラーや警告メッセージなど特定の情報を表示したりできるようにします。

CallbackHandlerは、アプリケーションに依存する形で実装されます。

基底のセキュリティ・サービスは、個々のCallbacksCallbackHandlerに渡すことによって様々なタイプの情報に対するリクエストを行います。CallbackHandler実装は、渡されたCallbacksに応じて情報を取得したり表示したりする方法を決定します。たとえば、基底のサービスがユーザーを認証するためにユーザー名とパスワードを必要としていれば、NameCallbackおよびPasswordCallbackを使用します。その後、CallbackHandlerは逐次的にユーザー名およびパスワードの入力を求めるか、または単一のウィンドウで両方の入力を求めるかを選択できます。


表4-2 WebLogic JAAS API

WebLogic JAAS API 説明

weblogic.security.auth.Authenticate

ユーザー資格証明の認証に使用される認証クラス。

LoginModuleのWebLogic実装(weblogic.security.auth.login

UsernamePasswordLoginModule)では、このクラスを使用してユーザーを認証し、PrincipalsSubjectに追加します。LoginModuleを記述した場合は、同じ目的でこのクラスを使用する必要があります。

weblogic.security.auth.Callback.ContextHandlerCallback

基底のセキュリティ・サービスでは、このクラスを使用してContextHandlerCallbackをインスタンス化し、CallbackHandlerinvokeCallbackメソッドに渡して、このセキュリティ操作に関係するContextHandlerを取得します。この操作にContextHandlerが関連付けられていない場合は、javax.security.auth.callback.UnsupportedCallbackexceptionがスローされます。

このコールバックによって、ContextHandlerがLoginModule.login()メソッドに渡されます。

weblogic.security.auth.Callback.GroupCallback

基底のセキュリティ・サービスでは、このクラスを使用してGroupCallbackをインスタンス化し、CallbackHandlerinvokeCallbackメソッドに渡して、グループ情報を取得します。

weblogic.security.auth.Callback.URLCallback

基底のセキュリティ・サービスでは、このクラスを使用してURLCallbackをインスタンス化し、CallbackHandlerinvokeCallbackメソッドに渡して、URL情報を取得します。

Login Module のWebLogic実装(weblogic.security.auth.login

UsernamePasswordLoginModule)ではこのクラスを使用します。

注意:アプリケーション開発者は、URL情報の取得にこのクラスを使用すべきではありません。かわりに、weblogic.security.URLCallbackHandlerを使用します。

weblogic.security.Security

このクラスはWebLogic ServerクライアントのrunAsメソッドを実装します。クライアント・アプリケーションは、実行するPrivilegedActionまたはPrivilegedExceptionActionSubject IDを、runAsメソッドを使用して関連付けます。

サンプルの実装については、例4-5を参照してください。

weblogic.security.URLCallbackHandler

アプリケーション開発者がusernamepassword、およびURLを返すために使用するクラス。アプリケーション開発者は、このクラスを使用してURLCallbackを処理し、URL情報を取得します。


JAASクライアント・アプリケーション・コンポーネント

JAAS認証クライアント・アプリケーションには、少なくとも以下のコンポーネントが含まれます。

  • Javaクライアント

    JavaクライアントはLoginContextオブジェクトをインスタンス化し、オブジェクトのlogin()メソッドを呼び出すことでログインを呼び出します。login()メソッドはLoginModule内のメソッドを呼び出して、ログインおよび認証を実行します。

    LoginContextはまた、新しい空のjavax.security.auth.Subjectオブジェクト(認証されているユーザーまたはサービスを表す)をインスタンス化し、構成されたLoginModuleを作成し、それをこの新しいSubjectおよびCallbackHandlerで初期化します。

    LoginContextは、その後LoginContextのgetSubjectメソッドを呼び出すことで、認証されたサブジェクトを取得します。LoginContextはweblogic.security.Security.runAs()メソッドを使って、ユーザーIDにかわって実行されるPrivilegedActionまたはPrivilegedExceptionActionSubjectのIDを関連付けます。

  • LoginModule

    LoginModuleはCallbackHandlerを使用して、ユーザー名およびパスワードを取得し、そのユーザー名とパスワードが要求どおりのものであるかどうかを判別します。

    認証に成功すると、LoginModuleは、ユーザーを表すプリンシパルをサブジェクトに格納します。LoginModuleがサブジェクトに格納するプリンシパルはPrincipalのインスタンスであり、java.security.Principalインタフェースを実装するクラスです。

    LoginModuleファイルは、ユーザー名およびパスワードの認証や証明書の認証など、様々なタイプの認証を実行するように記述できます。クライアント・アプリケーションに含めるLoginModuleは、1つ(最低要件)でも複数でもかまいません。


    注意:

    WebLogic ServerアプリケーションでJAAS javax.security.auth.Subject.doAsメソッドを使用する場合、サブジェクトとクライアント・アクションは関連付けられません。doAsメソッドを使用してWebLogic ServerアプリケーションにJava EEセキュリティを実装することは可能ですが、この場合でもSecurity.runAs()メソッドを使用する必要があります。

  • Callbackhandler

    CallbackHandlerは、javax.security.auth.callback.CallbackHandlerインタフェースを実装します。LoginModuleは、CallbackHandlerを使って、ユーザーと対話し、ユーザー名やパスワードなどのリクエストされた情報を取得します。

  • 構成ファイル

    このファイルでは、アプリケーションで使用するLoginModuleを構成します。LoginModuleの場所と、複数のLoginModuleがある場合は、実行する順番を指定します。このファイルを使うと、JavaアプリケーションはLoginModuleを使って定義および実装される認証テクノロジから独立を保つことができます。

  • アクション・ファイル

    このファイルでは、クライアント・アプリケーションが実行する処理を定義します。

  • ant構築スクリプト(build.xml)

    このスクリプトは、アプリケーションに必要なすべてのファイルをコンパイルし、それらをWebLogic Serverのアプリケーション・ディレクトリにデプロイします。

ここで説明しているコンポーネントを実装する完全な実践的JAAS認証クライアントについては、WebLogic Serverで提供されているSAMPLES_HOME\server\examples\src\examples\security\jaasディレクトリのJAASサンプル・アプリケーションを参照してください。

JAAS認証の基本の詳細は、Sunの「JAAS Authentication Tutorial」(http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html)を参照してください。

WebLogic LoginModule実装

LoginModuleクラス(UsernamePasswordLoginModule.class)のWebLogic実装は、WebLogic Server配布キットにおいて、WL_HOME\server\libディレクトリのweblogic.jarファイルで提供されています。


注意:

WebLogic Serverは、JAASで定義されているすべてのコールバックのタイプだけではなく、JAAS仕様を拡張するコールバックのタイプもすべてサポートしています。

WebLogic ServerのUsernamePasswordLoginModuleは、実行に先立ってシステム・ユーザーの認証定義が存在するかどうかを調べ、すでに定義されている場合は何も行いません。

JAAS LoginModuleの実装の詳細は、LoginModule開発者ガイド(http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASLMDevGuide.html)を参照してください。

JVM全体のデフォルト・ユーザーとrunAs()メソッド

LoginModuleのWebLogic Server実装(weblogic.security.auth.login.UsernamePasswordLoginModule)を初めて使用してログインすると、指定されたユーザーがJVM (Java仮想マシン)に対するマシン全体のデフォルト・ユーザーとなります。weblogic.security.Security.runAs()メソッドを実行すると、このメソッドは指定されたSubjectと現在のスレッドのアクセス許可を関連付けてから、アクションを実行します。指定されたSubjectが権限を持たないユーザー(グループに割り当てられていないユーザーは権限を持たないと見なされる)を表している場合、JVM全体のデフォルト・ユーザーが使用されます。したがって、runAs()メソッドでは必要なSubjectを指定することが重要です。それには、以下のオプションがあります。

  • オプション1 :クライアントがmain()の制御を持つ場合は、例4-1で示されているラッパー・コードをクライアント・コードで実装します。

  • オプション2 :クライアントがmain()の制御を持たない場合、例4-1に示したラッパー・コードを各スレッドのrun()メソッドに実装します。

例4-1 runAs()メソッドのラッパー・コード

import java.security.PrivilegedAction;
import javax.security.auth.Subject;
import weblogic.security.Security;

public class client
{
  public static void main(String[] args)
  {
  Security.runAs(new Subject(),
    new PrivilegedAction() {
       public Object run() {
       //
       //If implementing in client code, main() goes here.
       //
       return null;
       }
    });
  }
}

JAAS認証を使用するクライアント・アプリケーションの作成

WebLogic Server JavaクライアントにおいてJAASを使ってサブジェクトを認証するには、以下の手順を実行します。

  1. WebLogic Serverで使用する認証メカニズム用のLoginModuleクラスを実装します。認証メカニズムのタイプごとにLoginModuleクラスが必要です。1つのWebLogic Serverデプロイメントに対して複数のLoginModuleクラスを割り当てることができます。


    注意:

    ユーザー名およびパスワードの認証には、WebLogic Server提供のLoginModuleの実装(weblogic.security.auth.login.UsernamePasswordLoginModule)を使用することをお薦めします。ユーザー名およびパスワードの認証用に自分でLoginModuleを作成することもできます。しかし、WebLogic ServerのLoginModuleを修正して再利用しようとはしないでください。LoginModuleを自分で作成する場合は、ログインを実行するためにweblogic.security.auth.Authenticate.authenticate()メソッドを呼び出すように記述します。SAMLなどのリモート・ログイン・メカニズムを使用している場合は、authenticate()メソッドを呼び出す必要はありません。WebLogic Serverを使用してログインを実行する場合は、authenticate()を呼び出すだけで済みます。

    weblogic.security.auth.Authenticateクラスは、表4-1で説明されているように初期コンテキストとしてJNDI Environmentオブジェクトを使用します。

  2. LoginModuleがユーザーと対話し、ユーザー名、パスワード、URLなどのリクエストされた情報を取得するために使用するCallbackHandlerクラスを実装します。URLにはWebLogicクラスタのURLも指定でき、その場合クライアント側でサーバーのフェイルオーバーによるメリットを得られます。WebLogic Server配布キットには、JAASクライアント・サンプルで使用するSampleCallbackHandlerが含まれています。SampleCallbackHandler.javaコードは開発キットとしてSAMPLES_HOME\server\examples\src\examples\security\jaasディレクトリに含まれています。


    注意:

    独自のCallbackHandlerクラスを実装するかわりに、WebLogic提供による2つのCallbackHandlerクラス、すなわちweblogic.security.SimpleCallbackHandlerまたはweblogic.security.URLCallbackHandlerのいずれかを使用できます。詳細については、WebLogicクラスのJavadocを参照してください。

  3. WebLogic Serverで使用するLoginModuleクラス、およびLoginModuleクラスを呼び出す順序を指定する構成ファイルを記述します。WebLogic Server配布キットで提供されるJAASクライアントのサンプルで使用されるサンプル構成ファイルについては、例4-2を参照してください。

例4-2 sample_jaas.configのサンプル・コード

/** Login Configuration for the JAAS Sample Application **/
Sample {
    weblogic.security.auth.login.UsernamePasswordLoginModule
            required debug=false;
};
  1. Javaクライアントにおいて、LoginContextをインスタンス化するコードを記述します。LoginContextは、構成ファイルsample_jaas.configを調べて、WebLogic Server用に構成されているデフォルトのLoginModuleをロードします。LoginContextのインスタンス化の例については、例4-3を参照してください。


    注意:

    IDアサーション・プロバイダやWebLogic Serverのリモート・インスタンスなどの他の手段を使ってユーザーを認証する場合には、デフォルトLoginModuleはリモート・ソースによって決定されます。

例4-3 LoginContextのコードの一部分

...
import javax.security.auth.login.LoginContext;
...
    LoginContext loginContext = null;
    try
    {
      // Create LoginContext; specify username/password login module
      loginContext = new LoginContext("Sample", 
             new SampleCallbackHandler(username, password, url));
    }
  1. LoginContextlogin()メソッドを呼び出します。login()メソッドによって、ロードされたLoginModuleがすべて呼び出されます。各LoginModuleでサブジェクトの認証が試みられます。構成されているログイン条件が満たされない場合、LoginContextLoginExceptionをスローします。login()メソッドの例については、例4-4を参照してください。

例4-4 login()メソッドのコードの一部分

...
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.security.auth.login.FailedLoginException;
import javax.security.auth.login.AccountExpiredException;
import javax.security.auth.login.CredentialExpiredException;
...
 /**
     * Attempt authentication
     */
    try
    {
      // If we return without an exception, authentication succeeded
      loginContext.login();
    }
    catch(FailedLoginException fle)
    {
      System.out.println("Authentication Failed, " +
                               fle.getMessage());
      System.exit(-1);
    }
    catch(AccountExpiredException aee)
    {
      System.out.println("Authentication Failed: Account Expired");
      System.exit(-1);
    }
    catch(CredentialExpiredException cee)
    {
      System.out.println("Authentication Failed: Credentials
                               Expired");
      System.exit(-1);
    }
    catch(Exception e)
    {
      System.out.println("Authentication Failed: Unexpected
                               Exception, " + e.getMessage());
      e.printStackTrace();
      System.exit(-1);
    }
  1. Javaクライアント内にコードを記述して、javax.security.auth.Subject.getSubject()メソッドを使用するLoginContextインスタンスから認証されたサブジェクトを取得し、アクションをサブジェクトとして呼び出します。サブジェクトの認証に成功したら、weblogic.security.Security.runAs()メソッドを呼び出すことで、そのサブジェクトに対してアクセス制御を設定できます。runAs()メソッドは、指定されたサブジェクトと現在のスレッドのアクセス許可を関連付けた後、アクションを実行します。getSubject()メソッドとrunAs()メソッドの実装例については、例4-5を参照してください。


    注意:

    WebLogic ServerアプリケーションでJAAS javax.security.auth.Subject.doAsメソッドを使用する場合、サブジェクトとクライアント・アクションは関連付けられません。doAsメソッドを使用してWebLogic ServerアプリケーションにJava EEセキュリティを実装することは可能ですが、この場合でもSecurity.runAs()メソッドを使用する必要があります。

例4-5 getSubject()メソッドとrunAs()メソッドのコードの一部分

...
/**
 * Retrieve authenticated subject, perform SampleAction as Subject
 */
   Subject subject = loginContext.getSubject();
   SampleAction sampleAction = new SampleAction(url);
   Security.runAs(subject, sampleAction);
   System.exit(0);
...
  1. サブジェクトが必要な権限を持っている場合にアクションを実行するコードを記述します。株式取引用のEJBを実行するjavax.security.PrivilegedActionクラスの実装例SampleActionが用意されています。SampleAction.javaコードは開発キットとしてSAMPLES_HOME\server\examples\src\examples\security\jaasディレクトリに含まれています。

  2. LoginContextインスタンスのlogout()メソッドを呼び出します。logout()メソッドは、ユーザーのセッションをクローズし、Subjectをクリアします。login()メソッドの例については、例4-6を参照してください。

例4-6 logout()メソッドのサンプル・コード

...
import javax.security.auth.login.LoginContext;
...
try
    {
      System.out.println("logging out...");
      loginContext.logout();
    }

注意:

LoginModule.logout()メソッドはWebLogic認証プロバイダまたはカスタム認証プロバイダに対して呼び出されることはありません。これは、いったんプリンシパルが作成されサブジェクト内に入れられると、WebLogic Securityフレームワークはこのサブジェクトのライフサイクルを制御しなくなるからです。したがって、JAAS LoginContextを作成してログインおよびサブジェクトの取得を行うコードでも、ログアウトするためにLoginContextを呼び出す必要があります。LoginContext.logout()を呼び出すと、サブジェクトからプリンシパルがクリアされます。

JNDI認証の使い方

Javaクライアントは、Java Naming and Directory Interface (JNDI)を使用してWebLogic Serverに資格証明を渡します。Javaクライアントは、JNDI InitialContextを取得してWebLogic Serverとの通信を確立します。その後、InitialContextを使用して、WebLogic Server JNDIツリーで必要なリソースをルックアップします。


注意:

JAASは認証方法として望ましい選択肢ですが、WebLogic認証プロバイダのLoginModuleはユーザー名とパスワードの認証しかサポートしていません。したがって、クライアントの証明書認証(双方向SSL認証ともいう)ではJNDIを使用します。クライアントの証明書認証にJAASを使用するには、LoginModuleで証明書の認証を行うカスタム認証プロバイダを記述する必要があります。LoginModuleの作成方法については、http://download.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASLMDevGuide.htmlを参照してください。

ユーザーとユーザーの資格証明を指定するには、表4-1で示されているJNDIプロパティを設定します。

表4-3 認証に使用されるJNDIプロパティ

プロパティ 意味
INITIAL_CONTEXT_FACTORY 

エントリ・ポイントをWebLogic Server環境に提供します。クラスweblogic.jndi.WLInitialContextFactoryはWebLogic Server用のJNDI SPIです。

PROVIDER_URL 

ネーム・サービスを提供するWebLogic Serverのホストとポートを指定します。例: t3://weblogic:7001

SECURITY_PRINCIPAL 

ユーザーがデフォルトの(アクティブな)セキュリティ・レルムに対して認証されているときのユーザーのIDを指定します。

SECURITY_CREDENTIALS 

ユーザーがデフォルトの(アクティブな)セキュリティ・レルムに対して認証されているときのユーザーの資格証明を指定します。


これらのプロパティは、InitialContextコンストラクタに渡されるハッシュ表に格納されます。例4-7に、WebLogic Serverで実行されるJavaクライアントでのJNDI認証の使い方を示します。

例4-7 認証の例

...
Hashtable env = new Hashtable();
     env.put(Context.INITIAL_CONTEXT_FACTORY,
              "weblogic.jndi.WLInitialContextFactory");
     env.put(Context.PROVIDER_URL, "t3://weblogic:7001");
     env.put(Context.SECURITY_PRINCIPAL, "javaclient");
     env.put(Context.SECURITY_CREDENTIALS, "javaclientpassword");
     ctx = new InitialContext(env);

注意:

JNDIコンテキストとスレッド、およびJNDIコンテキストの潜在的な問題を回避する方法の詳細は、『Oracle WebLogic Server JNDIのプログラミング』のJNDIコンテキストとスレッドに関する項およびJNDIコンテキストの問題の回避方法に関する項を参照してください。

WebLogic Server 9.0より前のバージョンでは、JNDIでIIOP以外のプロトコルを使用する場合、最初のユーザーは削除されず、他のユーザーが存在しない場合はデフォルト・ユーザーになります。これは適切な処理ではありません。ユーザー名と資格証明を指定しない以後のログインに対してデフォルト・ユーザーのIDが付与されるからです。

バージョン9.0以降では、このような動作は発生せず、デフォルト・ユーザーも存在しません。

以前の動作に戻すには、コマンド・ラインまたはweblogic.jndi.WLContext.ENABLE_DEFAULT_USERインタフェースでフィールドを設定する必要があります。


JavaクライアントのJAAS認証サンプル・コード

WebLogic Serverソフトウェアには、完全な実践的JAAS認証サンプルが付属しています。そのサンプルは、SAMPLES_HOME\server\examples\src\examples\security\jaasディレクトリにあります。このサンプルの説明と、構築、構成、および実行の手順については、サンプル・ディレクトリのpackage.htmlファイルを参照してください。このサンプル・コードは、修正して再利用できます。