|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjavax.security.auth.login.LoginContext
public class LoginContext
LoginContext クラスは、Subject を認証するための基本的なメソッドを記述し、基本となる認証テクノロジに依存しないアプリケーション開発の方法を提供します。Configuration は、アプリケーションで使用される認証テクノロジ (LoginModule) を指定します。このため、アプリケーション自体に変更を加えることなく、アプリケーションに異なる LoginModule をプラグインできます。
このクラスは、プラグイン可能な認証をサポートするだけでなく、スタックされた認証の概念もサポートします。アプリケーションを、2 つ以上の LoginModule を使用するように構成できます。たとえば、1 つのアプリケーションで Kerberos LoginModule とスマートカード LoginModule の両方を構成できます。
通常の呼び出し側は、name と CallbackHandler を使用して LoginContext をインスタンス化します。LoginContext は、name を Configuration のインデックスとして使用し、使用する LoginModule や、認証全体を成功させるために成功しなければならない LoginModule を判定します。CallbackHandler は基本となる LoginModule に渡され、LoginModule はユーザーとのやりとり (グラフィカルユーザーインタフェースでユーザー名とパスワードの入力を求めるなど) を行います。
呼び出し側は、LoginContext をインスタンス化すると、login メソッドを呼び出して Subject の認証を行います。login メソッドは構成済みモジュールを呼び出して、各種認証 (ユーザー名/パスワードを使用した認証、スマートカードの PIN 認証など) を行います。認証に失敗しても、LoginModule は認証を再試行しません。 また、遅延時間も発生しません。こうしたタスクは、LoginContext の呼び出し側が担当します。
login メソッドが例外をスローすることなく返ってきた場合は、認証全体に成功したことになります。そして、呼び出し側は getSubject メソッドを呼び出すことで、新たに認証された Subject を取得できます。Subject と関連付けられた Principal と Credential は、Subject の getPrincipals、getPublicCredentials、および getPrivateCredentials の各メソッドを呼び出すことで取得できます。
Subject をログアウトさせる場合、呼び出し側は logout メソッドを呼び出します。login メソッドの場合と同様、この logout メソッドは構成済みモジュールの logout メソッドを呼び出します。
1 つの LoginContext で複数の Subject を認証することはできません。Subject ごとに別個の LoginContext を使用する必要があります。
次の内容は、すべての LoginContext コンストラクタに適用されます。
サブジェクト
null Subject を指定した場合で、null 値が許可されているとき、LoginContext は新しい Subject をインスタンス化する。
構成
コンストラクタに Configuration 入力パラメータが指定されていない場合、または呼び出し側が null Configuration オブジェクトを指定した場合、コンストラクタは次の呼び出しを使用してインストール済みの Configuration を取得する。
config = Configuration.getConfiguration();
どちらの場合も、コンストラクタに指定された name 引数は Configuration.getAppConfigurationEntry メソッドに渡される。Configuration が指定された name のエントリを持たない場合、LoginContext は、デフォルトのエントリ名である「other」で getAppConfigurationEntry を呼び出す。「other」のエントリが存在しない場合、LoginException がスローされる。
AccessController.doPrivileged から構成済みモジュールを呼び出す。 これは、セキュリティー保護の必要があるタスク (リモートホストへの接続、Subject の更新など) を実行するモジュールがそれぞれ適切なアクセス権を必要とするのに対し、LoginContext の呼び出し側はこれらのアクセス権を必要としないためである。
AccessControlContext を保存し、そのコンテキストの制約を課された AccessController.doPrivileged 呼び出しからで構成済みモジュールを呼び出す。つまり、呼び出し側のコンテキスト (LoginContext の作成時に保存されたコンテキスト) は、モジュールが実行するセキュリティー保護を必要とするタスクの実行に必要なアクセス権を備えている必要がある。
CallbackHandler
null CallbackHandler オブジェクトを指定し、かつ null 値が許可されている場合、LoginContext は auth.login.defaultCallbackHandler セキュリティープロパティーからデフォルトのハンドラ実装の完全指定クラス名を照会する。このセキュリティープロパティーが設定されていない場合、配下のモジュールはユーザーとの通信に使用する CallbackHandler を持たない。このため、呼び出し側は、構成済みモジュールが別の手段でユーザー認証を行うことができると想定する。
handle メソッド実装は、呼び出し側の現在の AccessControlContext によって制約を課された java.security.AccessController.doPrivileged 呼び出し内で、指定された CallbackHandler の handle メソッドを呼び出す必要がある。
auth.login.defaultCallbackHandler などのセキュリティープロパティーは、java.security.Security クラスを使用してプログラムから設定するか、<JAVA_HOME>/lib/security/java.security ファイルに格納されている Java セキュリティープロパティーファイルを使用して静的に設定できます。< JAVA_HOME> は、java.home システムプロパティーの値を参照し、JRE のインストールディレクトリを示します。
Security,
AuthPermission,
Subject,
CallbackHandler,
Configuration,
LoginModule| コンストラクタの概要 | |
|---|---|
LoginContext(String name)
名前を指定して新しい LoginContext をインスタンス化します。 |
|
LoginContext(String name,
CallbackHandler callbackHandler)
名前と CallbackHandler を指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
|
LoginContext(String name,
Subject subject)
名前と Subject を指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
|
LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler)
名前、認証を受ける Subject オブジェクト、および CallbackHandler オブジェクトを指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
|
LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler,
Configuration config)
名前、認証を受ける Subject オブジェクト、CallbackHandler オブジェクト、およびログイン Configuration を指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
|
| メソッドの概要 | |
|---|---|
Subject |
getSubject()
認証された Subject を返します。 |
void |
login()
認証を実行します。 |
void |
logout()
Subject をログアウトします。 |
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
|---|
public LoginContext(String name)
throws LoginException
LoginContext をインスタンス化します。
name - Configuration のインデックスとして使用される名前
LoginException - 呼び出し側で指定された name が Configuration になく、「other」の Configuration エントリがない場合、または auth.login.defaultCallbackHandler セキュリティープロパティーが設定されているにもかかわらず、実装クラスをロードできなかった場合
SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合
public LoginContext(String name,
Subject subject)
throws LoginException
Subject を指定して、新しい LoginContext オブジェクトをインスタンス化します。
name - Configuration のインデックスとして使用される名前 subject - 認証対象の Subject
LoginException - 呼び出し側で指定された name が Configuration になく、「other」という Configuration エントリがない場合、呼び出し側で指定された subject が null の場合、あるいは、auth.login.defaultCallbackHandler セキュリティープロパティーが設定されているにもかかわらず、実装クラスをロードできなかった場合
SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合
public LoginContext(String name,
CallbackHandler callbackHandler)
throws LoginException
CallbackHandler を指定して、新しい LoginContext オブジェクトをインスタンス化します。
name - Configuration のインデックスとして使用される名前 callbackHandler - LoginModule がユーザーとやりとりするために使用する CallbackHandler オブジェクト
LoginException - 呼び出し側で指定された name が Configuration になく、「other」の Configuration エントリがない場合、または呼び出し側で指定された callbackHandler が null の場合
SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合
public LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler)
throws LoginException
Subject オブジェクト、および CallbackHandler オブジェクトを指定して、新しい LoginContext オブジェクトをインスタンス化します。
name - Configuration のインデックスとして使用される名前 subject - 認証対象の Subject callbackHandler - LoginModule がユーザーとやりとりするために使用する CallbackHandler オブジェクト
LoginException - 呼び出し側で指定された name が Configuration になく、「other」の Configuration エントリがない場合、呼び出し側で指定された subject が null の場合、または呼び出し側で指定された callbackHandler が null の場合
SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合
public LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler,
Configuration config)
throws LoginException
Subject オブジェクト、CallbackHandler オブジェクト、およびログイン Configuration を指定して、新しい LoginContext オブジェクトをインスタンス化します。
name - 呼び出し側で指定された Configuration のインデックスとして使用される名前 subject - 認証対象の Subject、または null callbackHandler - LoginModule がユーザーとのやりとりに使用する CallbackHandler オブジェクト、または null config - 認証を行うために呼び出されるログインモジュールをリストする Configuration、または null
LoginException - 呼び出し側で指定された name が Configuration に存在せず、「other」のConfiguration エントリがない場合
SecurityException - SecurityManager が設定されていて、config が null で、かつ呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合| メソッドの詳細 |
|---|
public void login()
throws LoginException
このメソッドは、ログイン Configuration の定義に従い、LoginContext コンストラクタに指定された name 用に設定された各 LoginModule に対して login メソッドを呼び出します。すると、各 LoginModule により、各種認証 (ユーザー名/パスワードの認証、スマートカードの PIN 認証など) が実行されます。
このメソッドでは、LoginContext の認証全体が成功した場合 (関連する REQUIRED、REQUISITE、SUFFICIENT、OPTIONAL の LoginModule が成功) に構成済みの LoginModule に対して commit メソッドを呼び出すか、認証全体が失敗した場合に構成済みの各 LoginModule に対して abort メソッドを呼び出すことで、2 フェーズの認証プロセスが完了します。認証に成功した場合は、成功した各 LoginModule の commit メソッドによって、関連する Principal と Credential が、Subject と関連付けられます。認証に失敗した場合は、各 LoginModule の abort メソッドによって、いったん保存されていた状態を削除または破棄します。
認証プロセスの commit フェーズに失敗すると認証全体が失敗し、このメソッドは構成済みの各 LoginModule に対して abort メソッドを呼び出します。
どのような理由で abort フェーズが失敗しても、login フェーズ中や commit フェーズ中にスローされた元の例外を伝達します。どちらの場合も、認証全体が失敗します。
複数の LoginModule で失敗した場合、最初に失敗した LoginModule で発生した例外を伝達します。
このメソッドが abort フェーズに入った (login フェーズや commit フェーズに失敗した) 場合、アプリケーション用に構成されたすべての LoginModule が、それぞれの Configuration フラグパラメータとは関係なく呼び出されます。すなわち、abort フェーズ中は、Requisite と Sufficient のセマンティクスは無視されます。これにより、適切なクリーンアップと状態の復元を行うことが保証されます。
LoginException - 認証に失敗した場合
public void logout()
throws LoginException
Subject をログアウトします。
このメソッドは、この LoginContext 用に構成された各 LoginModule の logout メソッドを呼び出します。各 LoginModule は、それぞれのログアウト処理を行います。 ログアウト処理には、Subject からの Principal や Credential の削除/破棄や、状態のクリーンアップなどが含まれます。
このメソッドでは、アプリケーション用に構成されたすべての LoginModule が、それぞれの Configuration フラグパラメータに関係なく呼び出されます。すなわち、このメソッドでは、Requisite と Sufficient のセマンティクスは無視されます。これにより、適切なクリーンアップと状態の復元を行うことが保証されます。
LoginException - ログアウトに失敗した場合public Subject getSubject()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。