public class LoginContext extends Object
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コンストラクタに適用されます。
Subject
null
Subjectを指定した場合で、null
値が許可されているとき、LoginContextは新しいSubjectをインスタンス化する。
Configuration
コンストラクタに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
メソッドを呼び出す。
コンストラクタと説明 |
---|
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 オブジェクトをインスタンス化します。 |
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認証など)を実行します。
このメソッドでは、認証全体が成功した場合(関連する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()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.