モジュール java.base
パッケージ javax.security.auth.spi

インタフェースLoginModule

  • 既知のすべての実装クラス:
    JndiLoginModule, KeyStoreLoginModule, Krb5LoginModule, LdapLoginModule, NTLoginModule, UnixLoginModule

    public interface LoginModule

    認証技術プロバイダのためのサービス・プロバイダ・インタフェース。 ログイン・モジュールは特定タイプの認証を提供するアプリケーションへプラグインされます。

    アプリケーションがLoginContext APIに書き出す一方で、認証テクノロジ・プロバイダはLoginModuleインタフェースを実装します。 Configurationでは、特定のログイン・アプリケーションで使用されるLoginModuleを指定します。 このため、アプリケーション自体を変更せずに、複数の異なるログイン・モジュールをプラグインとしてアプリケーションで使用できます。

    LoginContextは、Configurationの読み取りおよび適切なLoginModuleのインスタンス化を実行します。 LoginModuleは、SubjectCallbackHandler、共有LoginModule状態、およびLoginModule固有のオプションを使用して、初期化されます。

    Subjectは、現在認証中のSubjectを表し、認証に成功すると、関連するCredentialで更新されます。 LoginModuleではCallbackHandlerを使用してユーザーとやりとりします。 たとえばユーザー名とパスワードの入力を求めるときに、CallbackHandlerを使用できます。 CallbackHandlernullである場合があります。 Subjectを認証するために必ずCallbackHandlerが必要なLoginModuleでは、LoginExceptionをスローすることができます。 また、共有状態を使用して、複数のログイン・モジュール間で情報を共有することもできます(オプション)。

    LoginModule固有のオプションは、ログインConfiguration内で管理者またはユーザーによって、このLoginModule用に構成されたオプションを表します。 これらのオプションはLoginModule自体によって定義され、その中での動作を制御します。 たとえば、LoginModuleでデバッグ/テスト機能をサポートするオプションを定義する場合を考えましょう。 オプションは、debug=trueなどの、キーと値の構文を使用して定義されます。 キーを使用して値を取得できるように、LoginModuleはオプションをMapとして格納します。 LoginModuleが定義することを選択するオプションの数に制限はありません。

    呼出し側のアプリケーションは、認証プロセスを単一の操作と見なします。 ただし、LoginModule内部の認証プロセスは、明確な2つのフェーズにわかれています。 最初のフェーズでは、ログイン・モジュールのloginメソッドが、ログイン・コンテキストのloginメソッドにより呼び出されます。 次に、LoginModuleloginメソッドは、実際の認証を実行してから(たとえば、パスワードの入力を促し、入力されたパスワードを検証する)、認証ステータスを非公開状態情報として保存します。 終わると、LoginModuleのloginメソッドではtrue (成功した場合)またはfalse (無視すべき場合)を返すか、LoginExceptionをスローして失敗を指定します。 障害が発生した場合、LoginModuleは認証を再試行したり、遅延を招いたりしてはいけません。 これらのタスクの実行は、アプリケーションが担当します。 アプリケーションが認証の再実行を試みると、ログイン・モジュールのloginが再度呼び出されます。

    2番目のフェーズでは、LoginContextの認証全体が成功した場合(関連するREQUIRED、REQUISITE、SUFFICIENT、OPTIONALのLoginModuleが成功)、LoginModulecommitメソッドが呼び出されます。 LoginModulecommitメソッドは、非公開で保存された状態をチェックして、独自の認証が成功したかどうかを確認します。 LoginContext全体の認証に成功し、LoginModule自体の認証に成功した場合、commitメソッドは関連するPrincipal (認証された識別情報)とCredential (暗号化キーなどの認証データ)をLoginModule内にあるSubjectと関連付けます。

    ログイン・コンテキストの認証全体が失敗した(関連するREQUIRED、REQUISITE、SUFFICIENT、およびOPTIONALログイン・モジュールが成功しなかった)場合、各LoginModuleabortメソッドが呼び出されます。 この場合、LoginModuleは、当初保存されていた認証状態をすべて削除/破棄します。

    Subjectからのログアウトには、1つのフェーズのみが含まれます。 LoginContextは、LoginModuleのlogoutメソッドを呼び出します。 LoginModulelogoutメソッドは、ログアウト処理を実行し、PrincipalやCredentialをSubjectから削除したり、セッション情報を記録したりします。

    LoginModuleの実装は、引数なしのコンストラクタを提供する必要があります。 これにより、LoginModuleをロードするクラスは、LoginModuleをインスタンス化できます。

    導入されたバージョン:
    1.4
    関連項目:
    LoginContext, Configuration
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 
      修飾子と型 メソッド 説明
      boolean abort()
      認証プロセスを中止するメソッドです(フェーズ2)。
      boolean commit()
      認証プロセスをコミットするメソッドです(フェーズ2)。
      void initialize​(Subject subject, CallbackHandler callbackHandler, Map<String,​?> sharedState, Map<String,​?> options)
      このLoginModuleを初期化します。
      boolean login()
      Subjectを認証するメソッドです(フェーズ1)。
      boolean logout()
      Subjectをログアウトさせるメソッドです。
    • メソッドの詳細

      • initialize

        void initialize​(Subject subject,
                        CallbackHandler callbackHandler,
                        Map<String,​?> sharedState,
                        Map<String,​?> options)
        このLoginModuleを初期化します。

        このメソッドは、このLoginModuleがインスタンス化されたあと、LoginContextによって呼び出されます。 このメソッドの目的は、このLoginModuleを関連情報で初期化することです。 sharedStateまたはoptionsパラメータに格納されているデータにこのLoginModuleが認識できないものがある場合、それらのパラメータは無視されます。

        パラメータ:
        subject - 認証対象のSubject
        callbackHandler - エンド・ユーザーとの通信(ユーザー名とパスワードの入力など)に使用されるCallbackHandler
        sharedState - 構成されたほかのLoginModuleと共有する状態。
        options - このLoginModule用にログインConfigurationで指定されたオプション。
      • login

        boolean login()
               throws LoginException
        Subjectを認証するメソッドです(フェーズ1)。

        このメソッドの実装では、Subjectを認証します。 たとえば、ユーザー名やパスワードといったSubjectの情報の入力を求めてから、パスワードを検証します。 このメソッドは、認証試行の結果をプライベート状態としてLoginModule内に保存します。

        戻り値:
        認証が成功した場合はtrue、このLoginModuleを無視する場合はfalse
        例外:
        LoginException - 認証に失敗した場合
      • commit

        boolean commit()
                throws LoginException
        認証プロセスをコミットするメソッドです(フェーズ2)。

        LoginContextの認証全体が成功した場合(関連するREQUIRED、REQUISITE、SUFFICIENT、およびOPTIONALの各LoginModuleが成功した場合)に呼び出されます。

        このLoginModule自体の認証に成功した場合(loginメソッドで保存された非公開状態を取得して調べる)、このメソッドは関連するPrincipalとCredentialをLoginModule内にあるSubjectに関連付けます。 このLoginModule自体の認証に失敗した場合は、いったん保存されていた状態を削除または破棄します。

        戻り値:
        このメソッドが成功した場合はtrue、このLoginModuleを無視する場合はfalse
        例外:
        LoginException - コミットに失敗した場合
      • abort

        boolean abort()
               throws LoginException
        認証プロセスを中止するメソッドです(フェーズ2)。

        このメソッドは、LoginContextの全体の認証に失敗した場合に呼び出されます。(関連するREQUIRED、REQUISITE、SUFFICIENT、およびOPTIONALの各LoginModuleが失敗した場合)。

        このLoginModule自体の認証に成功した場合(loginメソッドで保存された非公開状態を取得して調べる)、このメソッドは、最初に保存されていた状態をクリーンアップします。

        戻り値:
        このメソッドが成功した場合はtrue、このLoginModuleを無視する場合はfalse
        例外:
        LoginException - 中止に失敗した場合
      • logout

        boolean logout()
                throws LoginException
        Subjectをログアウトさせるメソッドです。

        このメソッドの実装では、SubjectのPrincipalとCredentialを削除または破棄します。

        実装上のノート:
        実装では、Subjectのプリンシパルまたは資格証明セットから変数を削除する前に、変数がnullであるかどうかを確認する必要があります。そうでない場合、NullPointerExceptionはこれらのセット「null要素を禁止」としてスローされます。 これは、ログイン失敗後にこのメソッドが呼び出される場合に特に重要です。
        戻り値:
        このメソッドが成功した場合はtrue、このLoginModuleを無視する場合はfalse
        例外:
        LoginException - ログアウトに失敗した場合