JAAS

com.sun.security.auth.module
クラス Krb5LoginModule

java.lang.Object
  上位を拡張 com.sun.security.auth.module.Krb5LoginModule
すべての実装されたインタフェース:
LoginModule

public class Krb5LoginModule
extends Object
implements LoginModule

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

Krb5LoginModule の構成エントリには複数のオプションがあり、認証プロセスや、Subject の private 資格セットへの追加を制御できます。オプションに関係なく、commit が呼び出されたときだけ、Subject の主体セットと private 資格セットが更新されます。commit が呼び出されると、KerberosPrincipalSubject の主体セットに追加され、KerberosTicketSubject の private 資格に追加されます。

KerberosLoginModule の構成エントリで storeKey オプションが true に設定された場合は、KerberosKey もサブジェクトの private 資格に追加されます。主体キーである KerberosKey はキータブから取得するか、ユーザのパスワードから派生させます。

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

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

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

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

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

refreshKrb5Config:
login メソッドが呼び出される前に構成を更新したい場合は、true に設定します。

useTicketCache:
チケットキャッシュから取得される TGT が必要な場合は true に設定します。チケットキャッシュの使用にこのモジュールが必要ない場合は false に設定します (デフォルトは false)。チケットキャッシュを検索する位置は次のようになります。Windows 2000 の場合は、Local Security Authority (LSA) API を使用して TGT を取得します。Solaris と Linux の場合は、/tmp/krb5cc_uid (uid は数字のユーザ識別子) でチケットキャッシュを検索します。チケットキャッシュが前述した位置で利用できない場合、あるいは別の Windows プラットフォームを使用している場合は、{user.home}{file.separator}krb5cc_{user.name} でキャッシュを検索します。ticketCache を使用すると、チケットキャッシュの位置をオーバーライドできます。

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 の private 資格に主体キーを格納する場合は true に設定します。

principal:
使用される主体の名前です。「testuser」のような単なるユーザ名でも「host/testhost.eng.sun.com」のようなサービス名でもかまいません。principal オプションを使用すると、複数の主体の資格が keyTab にある場合や特定のチケットキャッシュだけが必要な場合に主体を設定できます。主体は、システムプロパティ sun.security.krb5.principal を使って設定することもできます。さらに、このシステムプロパティを定義すると、設定した主体名が使用されます。このプロパティを設定しない場合は、構成時に指定した主体名が使用されます。

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



    useFirstPass   ユーザ名とパスワードを、それぞれのキーに 
                   javax.security.auth.login.name と 
                   javax.security.auth.login.password を使用してモジュールの
                   共有状態から取得する場合は、true に設定します。取得した値は
                   認証に使用されます。認証に失敗した場合は再試行されず、
                   呼び出し元のアプリケーションにエラーが返されます。

    tryFirstPass   ユーザ名とパスワードを、それぞれのキーに 
                   javax.security.auth.login.name と 
                   javax.security.auth.login.password を使用してモジュールの
                   共有状態から取得する場合は、true に設定します。取得した値は
                   認証に使用されます。認証に失敗した場合は、CallbackHandler で
                   新しいユーザ名とパスワードを取得し、別の認証を試みます。
                   この認証にも失敗した場合は、呼び出し元のアプリケーションに
                   エラーが返されます。

    storePass      CallbackHandler から取得したユーザ名とパスワードを、
                   それぞれのキーに javax.security.auth.login.name と 
                   javax.security.auth.login.password を使用して、モジュールの
                   共有状態に格納する場合は true に設定します。既存のユーザ名と
                   パスワードの値がすでに共有状態に存在する場合、あるいは認証に
                   失敗した場合は、何も行われません。

    clearPass     認証のログインとコミットの両フェーズが完了したあと、
                   この LoginModule でモジュールの共有状態に
                   格納されたユーザ名とパスワードを消去する場合は true に
                   設定します。
 

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

useTicketCache が設定されていないのに、パスワードが要求されないため、不正な組み合わせです。

useTicketCache が true でないのに、ticketCache が設定されているため、不正な組み合わせです。構成エラーが発生します。

useTicketCache が true でないのに、renewTGT が設定されているため、不正な組み合わせです。構成エラーが発生します。

storeKey は true ですが、ユーザの入力やキータブからキーを取得することができないため、不正な組み合わせです。構成エラーが発生します。

useKeyTab が true でないのに、keyTab が設定されているため、不正な組み合わせです。構成エラーが発生します。

主体名とパスワードの入力を要求します。認証交換を使用して TGT を KDC から取得し、主体と TGT で Subject を生成します。デバッグメッセージを出力します。

TGT をデフォルトキャッシュでチェックし、主体と TGT で Subject を生成します。TGT を利用できない場合はユーザの入力は要求されず、代わりに認証に失敗します。

TGT を主体のデフォルトキャッシュから取得し、Subject の主体と private 資格セットを生成します。チケットキャッシュが利用できないか、チケットキャッシュに主体の TGT が含まれない場合は、認証に失敗します。

主体の TGT をキャッシュで検索します。利用できない場合は、キータブのキーを使用して KDC との認証交換を行い、TGT を取得します。Subject は主体と TGT で生成されます。キーが利用できない場合や無効な場合は、認証に失敗します。

TGT を指定したキャッシュから取得します。使用された Kerberos の主体名がチケットキャッシュでの主体名になります。TGT がチケットキャッシュで利用できない場合、ユーザは主体名とパスワードの入力を要求されます。そして KDC との認証交換を使用して TGT が取得されます。Subject は TGT で生成されます。

主体キーをキータブから取得します。キーをキータブで利用できない場合、ユーザは主体のパスワードを要求されます。キータブから取得した、あるいはユーザが入力したパスワードから派生した主体キーを使用して Subject を生成します。

ユーザは、サービスの主体名の入力を要求されます。主体の長期キーがキータブで利用できる場合は、その長期キーが Subject の private 資格に追加されます。キータブ内の主体名とキーで認証交換が試みられます。認証交換に成功した場合、TGT が Subject の private 資格セットに追加されます。そうでない場合は、認証に失敗します。

主体キーがキータブから取得され、Subject の private 資格に追加されます。キーが利用できない場合、ユーザはパスワードの入力が求められます。そしてパスワードから派生したキーが Subject の private 資格セットに追加されます。クライアントの TGT はチケットキャッシュから取得され、Subject の private 資格に追加されます。TGT をチケットキャッシュで利用できない場合は、認証交換を使用して取得され、Subject の private 資格に追加されます。


コンストラクタの概要
Krb5LoginModule()
           
 
メソッドの概要
 boolean abort()
           LoginContext の認証全体が失敗した場合 (関連する REQUIRED、REQUISITE、SUFFICIENT、および OPTIONAL の各 LoginModule が失敗した場合) に呼び出されます。
 boolean commit()
           LoginContext の認証全体が成功した場合 (関連する REQUIRED、REQUISITE、SUFFICIENT、および OPTIONAL の各 LoginModule が成功した場合) に呼び出されます。
 void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
          この LoginModule を初期化します。
 boolean login()
          ユーザを認証します。
 boolean logout()
          ユーザをログアウトさせます。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Krb5LoginModule

public Krb5LoginModule()
メソッドの詳細

initialize

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

定義:
インタフェース LoginModule 内の initialize
パラメータ:
subject - 認証を受ける Subject

callbackHandler - エンドユーザとの通信 (ユーザ名とパスワードの入力など) に使用される CallbackHandler

sharedState - 共有 LoginModule の状態

options - この LoginModule 用にログイン Configuration で指定されたオプション

login

public boolean login()
              throws LoginException
ユーザを認証します。

定義:
インタフェース LoginModule 内の login
戻り値:
この LoginModule を無視してはならないため、常に true
例外:
FailedLoginException - 認証に失敗した場合

LoginException - この LoginModule で認証が実行できない場合

commit

public boolean commit()
               throws LoginException

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

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

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

abort

public boolean abort()
              throws LoginException

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

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

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

logout

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

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

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

JAAS