@Exported public class Krb5LoginModule extends Object implements LoginModule
このLoginModule
ではKerberosプロトコルを使用してユーザーを認証します。
Krb5LoginModule
の構成エントリには複数のオプションがあり、認証プロセスや、Subject
の非公開資格セットへの追加を制御できます。これらのオプションに関係なく、commit
が呼び出されたときにだけ、Subject
の主体セットと非公開資格セットが更新されます。commit
が呼び出されると、KerberosPrincipal
がSubject
のプリンシパル・セットに追加されます(principal
が「*」として指定されていない場合)。isInitiator
がtrueの場合は、KerberosTicket
がSubject
の非公開資格に追加されます。
KerberosLoginModule
の構成エントリでstoreKey
オプションがtrueに設定された場合は、KerberosKey
またはKeyTab
もサブジェクトの非公開資格に追加されます。プリンシパルのキーであるKerberosKey
は、ユーザーのパスワードから導出されます。KeyTab
は、useKeyTab
がtrueに設定された場合に使用されるキー・タブです。プリンシパルの値が「*」でない場合、KeyTab
オブジェクトの使用は指定されたプリンシパルのみに制限されます。
このLoginModule
はdoNotPrompt
オプションを認識します。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)。このモジュールは、次の位置でチケット・キャッシュを検索します。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」の値は無視されます。
チケットまたはキーを取得するためのメカニズムを複数指定する場合、優先順位は次のようになります。
いずれかのステップが失敗した場合は、次のステップにフォール・バックします。唯一の例外として、共有状態のステップが失敗し、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
=<file name>
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() |
修飾子と型 | メソッドと説明 |
---|---|
boolean |
abort()
このメソッドは、LoginContextの全体の認証に失敗した場合に呼び出されます。
|
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()
ユーザーをログアウトさせます。
|
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
で指定されたオプション。public boolean login() throws LoginException
login
、インタフェース: LoginModule
LoginModule
を無視してはならないため、常にtrue。FailedLoginException
- 認証に失敗した場合。 LoginException
- このLoginModule
で認証が実行できない場合。public boolean commit() throws LoginException
LoginContextの認証全体が成功した場合(関連するREQUIRED、REQUISITE、SUFFICIENT、およびOPTIONALの各LoginModuleが成功した場合)に呼び出されます。
このLoginModule自体の認証が成功(login
メソッドによって保存された、非公開状態を取得することでチェックされる)した場合は、Krb5Principal
とLoginModule
内のSubject
とが関連付けられます。Kerberos CredentialはSubjectの非公開資格セットに追加されます。このLoginModule自体の認証が失敗した場合は、当初保存された状態を削除します。
commit
、インタフェース: LoginModule
LoginException
- コミットに失敗した場合。public boolean abort() throws LoginException
このメソッドは、LoginContextの全体の認証に失敗した場合に呼び出されます。(関連するREQUIRED、REQUISITE、SUFFICIENT、およびOPTIONALの各LoginModuleが失敗した場合)。
このLoginModule自体の認証が成功した場合は(login
メソッドとcommit
メソッドによって保存された非公開状態を取得して調べる)、当初保存された状態を整理します。
abort
、インタフェース: LoginModule
LoginException
- 中止に失敗した場合。public boolean logout() throws LoginException
commit
メソッドで追加されたKrb5Principal
を削除します。
logout
、インタフェース: LoginModule
LoginModule
を無視してはならないため、常にtrue。LoginException
- ログアウトに失敗した場合。
Copyright © 1998, 2018, Oracle and/or its affiliates. All rights reserved.