モジュール jdk.security.auth

クラスKrb5LoginModule

  • すべての実装されたインタフェース:
    LoginModule

    public class Krb5LoginModule
    extends Object
    implements LoginModule
    このLoginModuleではKerberosプロトコルを使用してユーザーを認証します。

    Krb5LoginModuleの構成エントリには複数のオプションがあり、認証プロセスや、Subjectの非公開資格セットへの追加を制御できます。 これらのオプションに関係なく、commitが呼び出されたときにだけ、Subjectの主体セットと非公開資格セットが更新されます。 commitが呼び出されると、KerberosPrincipalSubjectのプリンシパル・セットに追加されます(principalが「*」として指定されていない場合)。 isInitiatorがtrueの場合は、KerberosTicketSubjectの非公開資格に追加されます。

    KerberosLoginModuleの構成エントリでstoreKeyオプションがtrueに設定された場合は、KerberosKeyまたはKeyTabもサブジェクトの非公開資格に追加されます。 プリンシパルのキーであるKerberosKeyは、ユーザーのパスワードから導出されます。KeyTabは、useKeyTabがtrueに設定された場合に使用されるキー・タブです。 プリンシパルの値が「*」でない場合、KeyTabオブジェクトの使用は指定されたプリンシパルのみに制限されます。

    このLoginModuledoNotPromptオプションを認識します。 trueに設定した場合は、パスワードを入力するプロンプトが表示されません。

    構成エントリ内のticketCacheオプションを使用すると、チケット・キャッシュの位置を指定できます。

    構成エントリ内のkeyTabオプションを使用すると、キー・タブの位置を指定できます。

    principalオプションを使用することで、主体名を構成エントリ内で指定できます。 プリンシパル名には、ユーザー名、host/mission.eng.sun.comのようなサービス名、「*」のいずれかを指定できます。 主体は、システム・プロパティsun.security.krb5.principalを使用して設定することもできます。 このプロパティはログイン時にチェックされます。 このプロパティが設定されていない場合は、構成の主体名が使用されます。 主体プロパティが設定されていなくて、主体エントリも存在しない場合、ユーザーに名前を入力するよう求められます。 エントリのこのプロパティが設定されていて、useTicketCacheがtrueに設定されているときは、この主体に属しているTGTのみが使用されます。

    Krb5LoginModuleでサポートされる構成オプションのリストを次に示します。

    refreshKrb5Config:
    loginメソッドを呼び出す前に構成をリフレッシュする場合は、これをtrueに設定します。
    useTicketCache:
    チケット・キャッシュから取得されるTGTが必要な場合はtrueに設定します。 チケット・キャッシュの使用にこのモジュールが必要ない場合はfalseに設定します(デフォルトはfalse)。 (デフォルトはFalseです。) SolarisとLinuxの場合は、/tmp/krb5cc_uid (uidは数字のユーザー識別子)でチケット・キャッシュを検索します。 チケット・キャッシュが前述した位置で利用できない場合、あるいはWindowsプラットフォームを使用している場合は、{user.home}{file.separator}krb5cc_{user.name}でキャッシュを検索します。 ticketCacheを使用すると、チケット・キャッシュの位置をオーバーライドできます。 Windowsでファイル・チケット・キャッシュからチケットを取得できない場合、Local Security Authority (LSA) APIを使用してTGTを取得します。
    ticketCache:
    ユーザーのTGTが含まれるチケット・キャッシュの名前を設定します。 設定した場合、useTicketCacheをtrueにする必要もあります。そうでない場合は、構成エラーが返されます。
    renewTGT:
    TGTが途中で期限切れになったときに更新する場合は、これをtrueに設定します。(有効期限までの時間が開始時刻からの時間よりも短い)。 設定した場合、useTicketCacheをtrueにする必要もあります。そうでない場合は、構成エラーが返されます。
    doNotPrompt:
    キャッシュ、キー・タブまたは共有状態から資格を取得できないときにパスワードを要求されないようにする場合は、これをtrueに設定します(デフォルトはfalse)。trueに設定した場合、キャッシュ、キー・タブまたは共有状態から資格を取得する必要があります。 そうでない場合は、認証に失敗します。
    useKeyTab:
    モジュールがキー・タブからプリンシパルのキーを取得するようにする場合は、これをtrueに設定します。デフォルト値はfalseです。keytabを設定しないと、モジュールはKerberos構成ファイルからキー・タブを検索します。 Kerberos構成ファイルに指定されていない場合は、{user.home}{file.separator}krb5.keytabファイルを検索します。
    keyTab:
    主体の非公開キーを取得するためにkeytabのファイル名を設定します。
    storeKey:
    Subjectの非公開資格にキー・タブまたはプリンシパルのキーを格納する場合はtrueに設定します。 isInitiatorがfalseの場合は、principalが「*」であれば、すべてのプリンシパルが格納されたKeyTabを使用できます。そうでなければ、使用は指定したプリンシパルのみに制限されます。
    principal:
    使用される主体の名前です。 testuser」のような単なるユーザー名でも、「host/testhost.eng.sun.com」のようなサービス名でもかまいません。 principalオプションを使用すると、複数の主体の資格がkeyTabに存在するときや特定のチケット・キャッシュだけが必要なときに、主体を設定できます。 主体は、システム・プロパティsun.security.krb5.principalを使用して設定することもできます。 また、このシステム・プロパティを定義すると、それが使用されます。 このプロパティが設定されていない場合は、構成の主体名が使用されます。 isInitiatorがfalseの場合は、プリンシパル名を「*」に設定できます。 この場合、受入れ側は単一のプリンシパルにバインドされません。 起動側が要求するプリンシパルのキーが見つかった場合は、そのプリンシパルとして機能します。 isInitiatorがtrueの場合は、プリンシパル名を「*」に設定できません。
    isInitiator:
    起動側の場合は、これをtrueに設定します。 受け入れ側のみの場合は、これをfalseに設定します。 (デフォルトはtrueです。) ノート: 起動側にはこの値をfalseに設定しないでください。

    このLoginModuleは、ユーザー名とパスワードを複数の認証モジュール間で共有できる次の追加のConfigurationオプションも認識します。

    useFirstPass:
    trueの場合、このLoginModuleはモジュールの共有状態からユーザー名とパスワードを取得します。それぞれのキーとしてjavax.security.auth.login.nameとjavax.security.auth.login.passwordが使用されます。 取得した値は認証に使用されます。 認証に失敗した場合は再試行されず、呼出し元のアプリケーションにエラーが返されます。
    tryFirstPass:
    trueの場合、このLoginModuleはモジュールの共有状態からユーザー名とパスワードを取得します。それぞれのキーとしてjavax.security.auth.login.nameとjavax.security.auth.login.passwordが使用されます。 取得した値は認証に使用されます。 認証に失敗した場合は、モジュールはCallbackHandlerを使用して新しいユーザー名とパスワードを取得し、別の認証を試みます。 この認証にも失敗した場合は、呼出し元のアプリケーションにエラーが返されます
    storePass:
    trueの場合、このLoginModuleはCallbackHandlerから取得したユーザー名とパスワードをモジュールの共有状態に格納します。それぞれのキーとしてjavax.security.auth.login.nameとjavax.security.auth.login.passwordが使用されます。 既存のユーザー名とパスワードの値がすでに共有状態に存在する場合、あるいは認証に失敗した場合は、何も行われません。
    clearPass:
    trueの場合、このLoginModuleは、認証の両方のフェーズ(ログインとコミット)が完了した後で、モジュールの共有状態に格納されたユーザー名とパスワードをクリアします。

    主体のシステム・プロパティまたはキーがすでに指定されている場合、共有状態の「javax.security.auth.login.name」の値は無視されます。

    チケットまたはキーを取得するためのメカニズムを複数指定する場合、優先順位は次のようになります。

    1. チケット・キャッシュ
    2. keytab
    3. 共有状態
    4. ユーザー・プロンプト

    いずれかのステップが失敗した場合は、次のステップにフォール・バックします。 共有状態のステップが失敗し、useFirstPass = trueが発生した場合は、ユーザー・プロンプトが表示されません。

    JAAS構成ファイルのKrb5LoginModule用の構成値とその結果の例を次に示します。

    
     doNotPrompt = true
    useTicketCache、useKeyTab、useFirstPass、およびtryFirstPassのいずれも設定されておらず、パスワードが要求されないため、不正な組み合わせです。
    
     ticketCache = <filename>
    useTicketCacheがtrueでなく、ticketCacheが設定されているため、不正な組み合わせです。 構成エラーが発生します。
    
     renewTGT = true
    useTicketCacheがtrueでなく、renewTGTが設定されているため、不正な組み合わせです。 構成エラーが発生します。
    
     storeKey = true  useTicketCache = true  doNotPrompt = true
    storeKeyはtrueですが、ユーザーに入力を要求することによって、またはキー・タブや共有状態からキーを取得することができないため、不正な組み合わせです。 構成エラーが発生します。
    
     keyTab = <filename>  doNotPrompt = true
    useKeyTabがtrueでないのに、keyTabが設定されているため、不正な組み合わせです。 構成エラーが発生します。
    
     debug = true
    主体名とパスワードの入力を要求します。 認証交換を使用してTGTをKDCから取得し、主体とTGTでSubjectを生成します。 デバッグ・メッセージを出力します。
    
     useTicketCache = true  doNotPrompt = true
    TGTをデフォルト・キャッシュでチェックし、主体とTGTでSubjectを生成します。 TGTを利用できない場合はユーザーの入力は要求されず、代わりに認証に失敗します。
    
     principal = <name>  useTicketCache = true  doNotPrompt = true
    TGTを主体のデフォルト・キャッシュから取得し、Subjectの主体と非公開資格セットを生成します。 チケット・キャッシュが利用できないか、チケット・キャッシュに主体のTGTが含まれない場合は、認証に失敗します。
    
     useTicketCache = true
     ticketCache = <file name>
     useKeyTab = true
     keyTab = <keytab filename>
     principal = <principal name>
     doNotPrompt = true
    主体のTGTをキャッシュで検索します。 利用できない場合は、キー・タブのキーを使用してKDCとの認証交換を行い、TGTを取得します。 Subjectは主体とTGTで生成されます。 キーが利用できない場合や無効な場合は、認証に失敗します。
    
     useTicketCache = true  ticketCache = <filename>
    TGTを指定したキャッシュから取得します。 使用されたKerberosの主体名がチケット・キャッシュでの主体名になります。 TGTがチケット・キャッシュで利用できない場合、ユーザーは主体名とパスワードの入力を要求されます。 そしてKDCとの認証交換を使用してTGTが取得されます。 SubjectはTGTで生成されます。
    
     useKeyTab = true  keyTab=<keytab filename>  principal = <principal name>  storeKey = true
    主体のキーをキー・タブから取得します。 キーをキー・タブで利用できない場合、ユーザーは主体のパスワードを要求されます。 キー・タブから取得した、あるいはユーザーが入力したパスワードから派生した主体のキーを使用してSubjectを生成します。
    
     useKeyTab = true  keyTab = <keytabname>  storeKey = true  doNotPrompt = false
    ユーザーは、サービスの主体名の入力を要求されます。 主体の長期キーがキー・タブで利用できる場合は、その長期キーがSubjectの非公開資格に追加されます。 キー・タブ内の主体名とキーで認証交換が試みられます。 認証交換に成功した場合、TGTがSubjectの非公開資格セットに追加されます。 そうでない場合は、認証に失敗します。
    
     isInitiator = false  useKeyTab = true  keyTab = <keytabname>  storeKey = true  principal = *
    受入れ側は未バインドの受入れ側になり、キー・タブにキーがあるかぎり、プリンシパルとして機能できます。
    
     useTicketCache = true
     ticketCache = <file name>
     useKeyTab = true
     keyTab = <file name>
     storeKey = true
     principal = <principal name>
    クライアントのTGTはチケット・キャッシュから取得され、Subjectの非公開資格に追加されます。 チケット・キャッシュでTGTを使用できないか、TGTのクライアント名が主体名と一致しない場合、Javaでは、秘密キーを使用して認証交換でTGTを取得して、Subjectの非公開資格に追加します。 この秘密キーは最初にキー・タブから取得されます。 このキーを使用できない場合、ユーザーはパスワードの入力を要求されます。 いずれの場合も、パスワードから派生したキーは、Subjectの非公開資格セットに追加されます。
    
     isInitiator = false
    受け入れ側としてだけ機能するように構成され、資格はAS交換によっては取得されません。 受け入れ側だけの場合、この値をfalseに設定します。 起動側にはこの値をfalseに設定しないでください。
    
     isInitiator = true
    起動側としてのみ機能するように構成され、資格はAS交換によって取得されます。 起動側の場合、この値をtrueに設定します。または、このオプションを未設定のままにすると、デフォルト値(true)が使用されます。

    • コンストラクタの詳細

      • Krb5LoginModule

        public Krb5LoginModule()
    • メソッドの詳細

      • initialize

        public void initialize​(Subject subject,
                               CallbackHandler callbackHandler,
                               Map<String,​?> sharedState,
                               Map<String,​?> options)
        このLoginModuleを初期化します。
        定義:
        initialize、インタフェースLoginModule
        パラメータ:
        subject - 認証対象のSubject
        callbackHandler - エンド・ユーザーとの通信(ユーザー名とパスワードの入力など)に使用されるCallbackHandler
        sharedState - 共有LoginModuleの状態。
        options - このLoginModule用にログインConfigurationで指定されたオプション。
      • login

        public boolean login()
                      throws LoginException
        ユーザーを認証します。
        定義:
        login、インタフェースLoginModule
        戻り値:
        このLoginModuleを無視してはならないため、常にtrue。
        例外:
        FailedLoginException - 認証に失敗した場合。
        LoginException - このLoginModuleで認証が実行できない場合。
      • commit

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

        このLoginModule自体の認証が成功(loginメソッドによって保存された、非公開状態を取得することでチェックされる)した場合は、Krb5PrincipalLoginModule内のSubjectとが関連付けられます。 Kerberos CredentialはSubjectの非公開資格セットに追加されます。 このLoginModule自体の認証が失敗した場合は、当初保存された状態を削除します。

        定義:
        commit、インタフェースLoginModule
        戻り値:
        このLoginModule自体のログインとコミットの試みが成功した場合はtrue、そうでない場合はfalse。
        例外:
        LoginException - コミットに失敗した場合。
      • abort

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

        このLoginModule自体の認証が成功した場合は(loginメソッドとcommitメソッドによって保存された非公開状態を取得して調べる)、当初保存された状態を整理します。

        定義:
        abort、インタフェースLoginModule
        戻り値:
        このLoginModule自体のログインやコミットの試みが失敗した場合はfalse、そうでない場合はtrue。
        例外:
        LoginException - 中止に失敗した場合。
      • logout

        public boolean logout()
                       throws LoginException
        ユーザーをログアウトさせます。

        commitメソッドで追加されたKrb5Principalを削除します。

        定義:
        logout、インタフェースLoginModule
        戻り値:
        このLoginModuleを無視してはならないため、常にtrue。
        例外:
        LoginException - ログアウトに失敗した場合。