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 の非公開資格セットへの追加を制御できます。これらのオプションに関係なく、commit が呼び出されたときにだけ、Subject の主体セットと非公開資格セットが更新されます。commit が呼び出されると、KerberosPrincipalSubject の主体セットに追加され、KerberosTicketSubject の非公開資格に追加されます。

KerberosLoginModule の構成エントリで storeKey オプションが true に設定された場合は、KerberosKey もサブジェクトの非公開資格に追加されます。主体のキーである 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:
モジュールが keytab から主体のキーを取得するようにする場合は、これを true に設定します。デフォルト値は false です。keyatb を設定しないと、モジュールは Kerberos 構成ファイルから keytab を検索します。
Kerberos 構成ファイルに指定されていない場合は、{user.home}{file.separator}krb5.keytab ファイルを検索します。

keyTab:
主体の非公開鍵を取得するために keytab のファイル名を設定します。

storeKey:
Subject の非公開資格に主体キーを格納する場合は true に設定します。

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

isInitiator:
起動側の場合は、これを true に設定します。受け入れ側のみの場合は、これを false に設定します。デフォルトは true です。注:起動側にはこの値を false に設定しないでください。

この 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 ですが、ユーザーの入力やキータブからキーを取得することができないため、不正な組み合わせです。構成エラーが発生します。

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

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

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

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

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

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

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

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

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

受け入れ側としてだけ機能するように構成され、資格は AS 交換によっては取得されません。受け入れ側だけの場合、この値を false に設定します。起動側にはこの値を false に設定しないでください。

起動側としてだけ機能するように構成され、資格は AS 交換によって取得されます。起動側の場合、この値を true に設定します。または、このオプションを未設定のままにすると、デフォルト値 (true) が使用されます。


コンストラクタの概要
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 の非公開資格セットに追加されます。この 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