WebSphere eXtreme Scale によりいくつかのセキュリティー・エンドポイントが提供され、カスタム・メカニズムを統合できるようになります。 ローカル・プログラミング・モデルにおける主なセキュリティー機能は許可で、認証サポートはありません。WebSphere® Application Server の外側で認証を行う必要があります。ただし、Subject オブジェクトを取得および検証するプラグインは備えられています。
ローカル・プログラミング・モデルでは、eXtreme Scale は認証メカニズムを提供しておらず、認証に関して、アプリケーション・サーバーまたはアプリケーションのいずれかの環境に依存しています。 eXtreme Scale が WebSphere Application Server または WebSphere Extended Deployment で使用される場合、アプリケーションは WebSphere Application Server セキュリティー認証メカニズムを使用できます。 eXtreme Scale が Java 2 Platform, Standard Edition (J2SE) 環境で稼働している場合、アプリケーションが Java 認証および承認サービス (JAAS) 認証またはその他の認証メカニズムを使用して認証を管理する必要があります。 JAAS 認証の使用方法については、「JAAS リファレンス・ガイド」を参照してください。アプリケーションと ObjectGrid インスタンスの契約には、javax.security.auth.Subject オブジェクトを使用します。 クライアントがアプリケーション・サーバーまたはアプリケーションによって認証されると、 アプリケーションは認証された javax.security.auth.Subject オブジェクトを検索し、この Subject オブジェクトを使用して ObjectGrid.getSession(Subject) メソッドを呼び出すことによって、ObjectGrid インスタンスからセッションを取得できます。 この Subject オブジェクトを使用して、マップ・データへのアクセスを許可します。 この契約は、サブジェクト引き渡し機構と呼ばれます。 以下の例に、ObjectGrid.getSession(Subject) API を示します。
/**
* This API allows the cache to use a specific subject rather than the one
* configured on the ObjectGrid to get a session.
* @param subject
* @return An instance of Session
* @throws ObjectGridException
* @throws TransactionCallbackException
* @throws InvalidSubjectException the subject passed in is not valid based
* on the SubjectValidation mechanism.
*/
public Session getSession(Subject subject)
throws ObjectGridException, TransactionCallbackException, InvalidSubjectException;
ObjectGrid インターフェースの ObjectGrid.getSession() メソッドは、Session オブジェクトを取得するのに使用することもできます。
/**
* This method returns a Session object that can be used by a single thread at a time.
* You cannot share this Session object between threads without placing a
* critical section around it. While the core framework allows the object to move
* between threads, the TransactionCallback and Loader might prevent this usage,
* especially in J2EE environments. When security is enabled, this method uses the
* SubjectSource to get a Subject object.
*
* If the initialize method has not been invoked prior to the first
* getSession invocation, then an implicit initialization occurs. This
* initialization ensures that all of the configuration is complete before
* any runtime usage is required.
*
* @see #initialize()
* @return An instance of Session
* @throws ObjectGridException
* @throws TransactionCallbackException
* @throws IllegalStateException if this method is called after the
* destroy() method is called.
*/
public Session getSession()
throws ObjectGridException, TransactionCallbackException;
API 資料で指定されているように、
セキュリティーが有効になると、このメソッドは SubjectSource プラグインを使用して Subject オブジェクトを取得します。
SubjectSource プラグインは、Subject オブジェクトの伝搬をサポートするために eXtreme Scale で
定義されるセキュリティー・プラグインの 1 つです。
詳細情報については、『セキュリティー関連プラグイン』を参照してください。getSession(Subject) メソッドは、ローカル ObjectGrid インスタンスでのみ呼び出すことができます。
分散 eXtreme Scale 構成のクライアント・サイドで getSession(Subject) メソッドを呼び出すと、IllegalStateException が発生します。WebSphere eXtreme Scale は、サブジェクト引き渡し機構に 関連する 2 つのセキュリティー・プラグイン、SubjectSource プラグインと SubjectValidation プラグインを提供します。
SubjectSource プラグイン
SubjectSource プラグインは、com.ibm.websphere.objectgrid.security.plugins.SubjectSource インターフェースによって表され、 eXtreme Scale を実行している環境から Subject オブジェクトを取得するために使用されます。 この環境は、ObjectGrid を使用するアプリケーションや、アプリケーションをホストするアプリケーション・サーバーなどです。 サブジェクト引き渡し機構の代わりとなる SubjectSource プラグインについて考えます。 サブジェクト引き渡し機構を使用すると、アプリケーションは Subject オブジェクトを検索し、それを使用して ObjectGrid セッション・オブジェクトを取得します。 SubjectSource プラグインを使用すると、eXtreme Scale ランタイムは Subject オブジェクトを検索し、それを使用してセッション・オブジェクトを取得します。 サブジェクト引き渡し機構は、アプリケーションに Subject オブジェクトの制御を与え、 SubjectSource プラグイン機構は Subject オブジェクトの検索からアプリケーションを解放します。 SubjectSource プラグインを使用すると、許可に使用できる eXtreme Scale クライアントを表す Subject オブジェクトを取得できます。 ObjectGrid.getSession メソッドが呼び出されると、Subject getSubject は、セキュリティーが有効な場合に、ObjectGridSecurityException をスローします。 WebSphere eXtreme Scale により、このプラグインのデフォルトの実装である com.ibm.websphere.objectgrid.security.plugins.builtins.WSSubjectSourceImpl が提供されます。 この実装を使用すると、アプリケーションが WebSphere Application Server で稼働している場合に、 スレッドから呼び出し元サブジェクトまたは RunAs サブジェクトを検索することができます。 WebSphere Application Server で eXtreme Scale を使用している場合は、このクラスを ObjectGrid 記述子 XML ファイル内で SubjectSource 実装クラスとして構成することができます。以下に、WSSubjectSourceImpl.getSubject メソッドの主なフローを示すコード・スニペットを示します。
Subject s = null;
try {
if (finalType == RUN_AS_SUBJECT) {
// get the RunAs subject
s = com.ibm.websphere.security.auth.WSSubject.getRunAsSubject();
}
else if (finalType == CALLER_SUBJECT) {
// get the callersubject
s = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
}
}
catch (WSSecurityException wse) {
throw new ObjectGridSecurityException(wse);
}
return s;
その他の詳細については、SubjectSource プラグインおよび WSSubjectSourceImpl 実装に関する API 資料を参照してください。SubjectValidation プラグイン
com.ibm.websphere.objectgrid.security.plugins.SubjectValidation インターフェースで表される SubjectValidation プラグインは、別のセキュリティー・プラグインです。SubjectValidation プラグインを使用すると、ObjectGrid に渡されるか、または SubjectSource プラグインによって検索される javax.security.auth.Subject が、改ざんされていない有効な Subject であることを検証できます。
SubjectValidation インターフェースの SubjectValidation.validateSubject(Subject) メソッドにより、Subject オブジェクトが取得されて返されます。Subject オブジェクトが有効とみなされるかどうか、および戻される Subject オブジェクトは、すべて実装によって決定されます。 Subject オブジェクトが無効の場合は、InvalidSubjectException になります。
このプラグインは、このメソッドに渡される Subject オブジェクトを信頼できない場合に使用できます。 Subject オブジェクトを検索するコードを作成するアプリケーション開発者は信頼できると考えられるためこれは稀なケースです。
Subject オブジェクトが改ざんされたかどうかは作成者のみが知っているため、このプラグインの実装は、Subject オブジェクト作成者からのサポートが必要です。 ただし、サブジェクトの作成者が、Subject が改ざんされたかどうかを関知していない場合もあります。 その場合、このプラグインの使用はお勧めできません。
WebSphere eXtreme Scale は、SubjectValidation のデフォルトの実装、com.ibm.websphere.objectgrid.security.plugins.builtins.WSSubjectValidationImpl を提供します。 この実装を使用して、WebSphere Application Server で認証済みのサブジェクトの妥当性検査を行うことができます。WebSphere Application Server で eXtreme Scale を使用している場合は、このクラスを SubjectValidation 実装クラスとして構成することができます。 WSSubjectValidationImpl 実装は、この Subject オブジェクトに関連付けられている資格情報トークンが改ざんされていない場合にの み、この Subject オブジェクトを有効であるとみなします。 Subject オブジェクトの他のパーツを変更できます。 WSSubjectValidationImpl 実装は、WebSphere Application Server に 資格情報トークンに一致するオリジナルの Subject を依頼し、そのオリジナルの Subject オブジェクトを検証済みの Subject オブジェクトとして戻します。 このため、資格情報トークン以外の Subject コンテンツに加えられた変更は、無効になります。 以下のコード・スニペットは、WSSubjectValidationImpl.validateSubject(Subject) の基本フローを示します。
// Create a LoginContext with scheme WSLogin and
// pass a Callback handler.
LoginContext lc = new LoginContext("WSLogin",
new WSCredTokenCallbackHandlerImpl(subject));
// When this method is called, the callback handler methods
// will be called to log the user in.
lc.login();
// Get the subject from the LoginContext
return lc.getSubject();
このコード・スニペットでは、資格情報トークンのコールバック・ハンドラー・オブジェクトである WSCredTokenCallbackHandlerImpl は、検証対象である Subject オブジェクトとともに作成されます。
次に、LoginContext オブジェクトがログイン・スキーム WSLogin とともに作成されます。
lc.login メソッドが呼び出されると、WebSphere Application Server セキュリティーは Subject オブジェクトから資格情報トークンを検索し、その後、検証済みの Subject オブジェクトとして対応する Subject を戻します。その他の詳細については、SubjectValidation および WSSubjectValidationImpl 実装の Java API を参照してください。
プラグイン構成
SubjectValidation プラグインおよび SubjectSource プラグインは、以下の 2 つの方法で構成できます。
<objectGrids>
<objectGrid name="secureClusterObjectGrid" securityEnabled="true"
authorizationMechanism="AUTHORIZATION_MECHANISM_JAAS">
<bean id="SubjectSource"
className="com.ibm.websphere.objectgrid.security.plugins.builtins.
WSSubjectSourceImpl" />
<bean id="SubjectValidation"
className="com.ibm.websphere.objectgrid.security.plugins.builtins.
WSSubjectValidationImpl" />
<bean id="TransactionCallback"
className="com.ibm.websphere.samples.objectgrid.
HeapTransactionCallback" />
...
</objectGrids>
**
* Set the SubjectValidation plug-in for this ObjectGrid instance. A
* SubjectValidation plug-in can be used to validate the Subject object
* passed in as a valid Subject. Refer to {@link SubjectValidation}
* for more details.
* @param subjectValidation the SubjectValidation plug-in
*/
void setSubjectValidation(SubjectValidation subjectValidation);
/**
* Set the SubjectSource plug-in. A SubjectSource plug-in can be used
* to get a Subject object from the environment to represent the
* ObjectGrid client.
*
* @param source the SubjectSource plug-in
*/
void setSubjectSource(SubjectSource source);
独自の Java 認証および承認サービス (JAAS) 認証コードを作成して、認証を処理できます。 独自のログイン・モジュールを作成し、認証モジュール用のログイン・モジュールを構成する必要があります。
ログイン・モジュールは、ユーザーに関する情報を受け取り、ユーザーを認証します。 この情報は、ユーザーの識別に使用可能な何らかのものです。 例えば、情報はユーザー ID およびパスワード、クライアント証明書などです。 情報を受け取ると、ログイン・モジュールにより情報が有効なサブジェクトを表示していることが検証され、次に Subject オブジェクトが作成されます。 現在、ログイン・モジュールのいくつかの使用可能な実装が公開されています。
FileLogin
{
com.acme.auth.FileLoginModule required
};
認証スキームは FileLogin であり、ログイン・モジュールは com.acme.auth.FileLoginModule です。 必須のトークンは、FileLoginModule モジュールがこのログインを検証する必要があることを示すか、または スキーム全体が失敗したことを示します。
JAAS ログイン・モジュール構成ファイルの設定は、以下のいずれか 1 つの方法で実行できます。
login.config.url.1=file:${java.home}/lib/security/file.login
コード が WebSphere Application Server 上で実行されている場合、管理コンソールで JAAS ログインを 構成し、このログイン構成をアプリケーション・サーバー構成に格納する必要があります。 詳細については、『Java 認証および承認サービスのログイン構成』を参照してください。