カスタム・レジストリーを使用するための UserRegistry インターフェースの開発
このインターフェースを実装すると、WebSphere® Application Server セキュリティーで カスタム・レジストリーが使用できるようになります。 この機能により、java.rmi ファイルが拡張されます。 リモート・レジストリーを使用すると、このプロセスをリモート側で完了することができます。
このタスクについて
以下のメソッドの実装を提供します。
手順
- initialize(java.util.Properties) で UserRegistry メソッドを初期化します。
このメソッドは、 UserRegistry メソッドを初期化するために呼び出されます。「カスタム・ユーザー・レジストリー」パネルに 定義されたすべてのプロパティーは、このメソッドへ伝搬されます。public void initialize(java.util.Properties props) throws CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、初期化メソッドはユーザーおよびグループの情報を含むレジストリー・ファイルの名前を取得します。
このメソッドは、サーバー立ち上げ時にレジストリーを初期化するために呼び出されます。 また、このメソッドは、セキュリティーがオンの場合、管理コンソールが検証を行なう場合にも呼び出されます。 このメソッドは、バージョン 4.x のものと同じです。
- checkPassword(String,String) でユーザーを認証します。
checkPassword メソッドは、ユーザーが名前またはユーザー ID とパスワードを使用してログインするときに、そのユーザーを認証するために呼び出されます。 このメソッドはストリングを戻します。これは、ほとんどの場合、ユーザー・セキュリティー名です。 このユーザーのクレデンシャルが、許可の目的のために作成されます。このユーザー名は、getCallerPrincipal エンタープライズ Bean 呼び出しでも戻され、サーブレットは、getUserPrincipal および getRemoteUser メソッドを呼び出します。レジストリーに表示名がある場合、詳しくは『getUserDisplayName メソッド』を参照してください。 ログインしているユーザー以外のユーザーを戻す場合は、 そのユーザーがレジストリー内で有効であることを確認する必要がある場合 があります。public String checkPassword(String userSecurityName, String password) throws PasswordCheckFailedException CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、mapCertificate メソッドは証明書チェーンから識別名 (DN) を入手し、ユーザーを戻す前にそれがレジストリー内で有効なユーザーであるか確認します。 サンプルでは、checkPassword メソッドは、ユーザー・レジストリー内の名前とパスワードの組み合わせをチェックし、 これらが一致する場合は認証済みのユーザーを戻します。
このメソッドはさまざまなシナリオで呼び出されます。例えば、ユーザー・レジストリーが初期化された後でユーザー情報の妥当性検査を行うために管理コンソールによって呼び出されます。 また、このメソッドは、ユーザーを認証するために製品の保護リソースにアクセスすると、許可を続行する前に呼び出されます。このメソッドは、バージョン 4.x のものと同じです。
- mapCertificate(X509Certificate[]) で X.509 certificate からユーザー名を取得します。
mapCertificate メソッドは、ブラウザーによって提供された X.509 証明書チェーンからユーザー名を取得するために呼び出されます。 完全な証明書チェーンがこのメソッドへ渡され、実装では、必要に応じてチェーンを妥当性検査し、 ユーザー情報を入手することができます。このユーザーのクレデンシャルが、許可の目的のために作成されます。ブラウザーの証明書がユーザーの構成でサポートされていない場合、例外 CertificateMapNotSupportedException を作成することができます。 証明書がサポートされていないと、 確認タイプが証明書の場合、 ブラウザーに有効な証明書があっても認証は結果的に失敗します。public String mapCertificate(X509Certificate[] cert) throws CertificateMapNotSupportedException, CertificateMapFailedException, CustomRegistryException, RemoteException;
このメソッドは、認証のために証明書が提供されるときに呼び出されます。 Web アプリケーションの場合、 認証制約がアプリケーションの web.xml ファイルで CLIENT-CERT に設定されていると、 このメソッドが呼び出され、証明書をレジストリー内の有効なユーザーにマップします。 Java™ クライアントの場合、このメソッドは、トラン スポート層の認証を使用しているときに、トランスポート層にクライアント証明書をマップする ために呼び出されます。 CSIv2 認証プロトコルを使用した ID アサーション・トークンが証明書を含めるように設定されている場合には、このメソッドが呼び出され、有効なユーザーに証明書がマップされます。
WebSphere Application Server バージョン 4.x では、入力パラメーターは X509Certificate 証明書です。 WebSphere Application Server バージョン 5.x 以降では、このパラメーターは証明書チェーンといった X509Certificate 証明書の配列を受け入れるように変更されています。 バージョン 4.x では、このパラメーターは Web アプリケーションの場合にのみ呼び出されましたが、バージョン 5.x 以降では、Web クライアントおよび Java クライアントのいずれの場合でもこのメソッドを呼び出すことができます。
- getRealm でセキュリティー・レルム名を取得します。
getRealm メソッドは、セキュリティー・レルムの名前を入手するために呼び出されます。レルムの名前は、 レジストリーがユーザーを認証するセキュリティー・ドメインを示します。このメソッドがヌル値を戻す場合、デフォルト名の customRealm が使用されます。public String getRealm() throws CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、getRealm メソッドはストリング customRealm を戻します。 このメソッドへの呼び出しのうち 1 つは、ユーザー・レジストリー情報の妥当性検査中に生じます。 このメソッドは、バージョン 4.x のものと同じです。
- getUsers(String,int) でレジストリーからユーザーのリストを取得します。
getUsers メソッドは、レジストリーからユーザーのリストを戻します。 ユーザーの名前は、Pattern パラメーターによって異なります。 ユーザーの数は、Limit パラメーターによって制限されます。多くのユーザーを持つレジストリーで、 すべてのユーザーを入手することは実用的ではありません。したがって、Limit パラメーターが、 レジストリーから検索されるユーザー数を制限するために導入されています。 Limit パラメーター値がゼロ (0) のときは、パターンに一致するすべてのユーザーを戻すことを意味しますが、大きなレジストリーの場合には問題を引き起こす可能性があるため、 注意して使用する必要があります。public Result getUsers(String pattern, int limit) throws CustomRegistryException, RemoteException;
カスタム・レジストリーの実装は、 少なくともワイルドカード検索 (*) をサポートすることが求められます。例えば、アスタリスクのパターン (*) はすべてのユーザーを戻し、パターン (b*) は b で始まるユーザーを戻します。
戻りパラメーターは、com.ibm.websphere.security.Result タイプのオブジェクトです。 このオブジェクトには、java.util.List および java.lang.boolean の 2 つの属性が含まれます。 リストには戻されたユーザーが含まれ、ブール・フラグがユーザー・レジストリー内に検索パターンに合う有効なユーザーがさらにあるかどうかを示します。 このブール・フラグは、レジストリーに有効なユーザーがさらにあるかどうかをクライアントへ示すために使用されます。
FileRegistrySample.java サンプル・ファイルの場合、getUsers メソッドはユーザー・レジストリーから必要な数のユーザーを取り出し、それらを Result オブジェクト内にリストとして設定します。 要求数を超えるユーザーがあるかどうかを調べるために、サンプルでは、要求した数よりも 1 人多くユーザーを入手し、追加ユーザーを検出した場合は、ブール・フラグを true に設定します。パターン・マッチングの場合は、RegExpSample クラスの match メソッドが使用されます。これは、アスタリスク (*) や疑問符 (?) などのワイルドカード文字をサポートします。.
このメソッドは、ユーザーをロールにマッピングするさまざまなパネルで、ユーザーをロールに追加するために、 管理コンソールによって呼び出されます。 管理コンソールは、 ユーザー・レジストリー内にパターンに一致する有効な項目がさらにあることを示すために 、Result オブジェクト内に設定されたブール値を使用します。
WebSphere Application Server バージョン 4.x では、このメソッドによって、Pattern パラメーターしか取らないよう指定されています。 戻り値はリストです。WebSphere Application Server バージョン 5.x 以降では、このメソッドは、もう 1 つのパラメーターである Limit を取るように変更されました。 理想としてはしきい値を取り、戻されるユーザーを制限するよう実装を変更します。 戻り値は変更され、リストと、さらに項目が存在するかを示すフラグから構成される Result オブジェクトを戻すようになりました。 リストが戻されたときに、Result.setList(List) メソッドを使用して Result オブジェクトにリストを設定してください。Limit パラメーター内に要求したよりも多くの項目がある場合、Result.setHasMore メソッドを使用して Result オブジェクト内でブール属性を true に設定してください。 Result オブジェクト内のデフォルトのブール属性は、false です。
- getUserDisplayName(String) でユーザーの表示名を取得します。
getUserDisplayName メソッドは、ユーザーの表示名が存在する場合にそれを戻します。 表示名は、 いくつかのレジストリーに設定できるユーザーを説明するオプションのストリングです。この記述名はユーザー用であり、レジストリーで固有である必要はありません。public String getUserDisplayName(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
例えば、IBM® i システムでは、ユーザー・プロファイルのテキスト記述を表示できます。
例えば、Windows システムでは、 ユーザーのフルネームを表示することができます。
レジストリーに表示名が必要ない場合は、 このメソッドに対してヌルまたは空ストリングを戻します。
WebSphere Application Server バージョン 4.x では、任意のユーザーに表示名が存在した場合、その表示名は Enterprise JavaBeans (EJB) メソッド呼び出し getCallerPrincipal およびサーブレット呼び出し getUserPrincipal および getRemoteUser で使用できました。 表示名がどのユーザーのセキュリティー名とも同じでない場合、前述のエンタープライズ Bean メソッドおよびサーブレット・メソッドに戻されます。 これらのメソッドの表示名が戻されることは、 表示名がユーザー・レジストリー内で固有ではないため、状況に よっては問題になる場合があります。 この問題を回避するために、この製品のこのバージョンでは、ユーザーの表示名の代わりにユーザーのセキュリティー名を戻すようにデフォルトの振る舞いが変更されています。カスタム・レジストリーのプロパティーの設定方法について詳しくは、 『カスタム・レジストリーのプロパティーの設定』のセクションを参照してください。
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、指定されたユーザー名と一致する名前を持つユーザーの表示名を戻します。 表示名が存在しない場合は、空ストリングが戻されます。
このメソッドは、この製品によって呼び出すことができます。 管理コンソールを使用して、またはコマンド行と wsadmin ツールを使用して表示名を示します。 このメソッドは、表示にのみ使用します。このメソッドは、バージョン 4.x のものと同じです。
- getUniqueUserId(String) でユーザーの固有 ID を取得します。
このメソッドは、セキュリティー名に基づき、ユーザーの固有 ID を戻します。public String getUniqueUserId(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプルの場合、このメソッドは、指定された名前と一致する名前を持つユーザーの uniqueUserId 値を戻します。 このメソッドは、 ユーザー用のクレデンシャルを構成するとき、およびアプリケーション用の許可表を作成するときに呼び出されます。
- getUserSecurityName(String) でユーザーのセキュリティー名を取得します。
このメソッドは、固有 ID を指定されたユーザーのセキュリティー名を戻します。 FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、 指定された ID と一致する固有 ID を持つユーザーのセキュリティー名を戻します。public String getUserSecurityName(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
このメソッドは、有効なユーザーが指定の uniqueUserId 用に存在することを確認するために呼び出されます。このメソッドは、 uniqueUserId がトークンから入手されるときにユーザーのセキュリティー名を取得するために呼び出されます。
- 指定ユーザーがレジストリーで正当なユーザーであるかどうかを isValidUser(String) でチェックします。
このメソッドは、 指定ユーザーがレジストリー内で有効なユーザーであるかどうかを示します。public boolean isValidUser(String userSecurityName) throws CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、ユーザーがレジストリー内にある場合は true を、ない場合は false を戻します。 このメソッドが主に呼び出されるのは、 ユーザーがディレクトリーに存在するかしないかを知ることによって今後の問題が回避できる場合です。 例えば、mapCertificate 呼び出しでは、ユーザーがユーザー・レジストリー内で有効なユーザーとして見つからない場合に名前が証明書から入手されると、そのユーザーのクレデンシャルを作成する必要はありません。
- getGroups(String,int) でユーザー・レジストリーからグループのリストを戻します。
getGroups メソッドは、ユーザー・レジストリーからグループのリストを戻します。 グループの名前は、Pattern パラメーターによって異なります。 グループの数は、Limit パラメーターによって制限されます。多くのグループを持つレジストリーで、 すべてのグループを入手することは実用的ではありません。したがって、ユーザー・レジストリーから検索されるグループ数を制限するために、Limit パラメーターが導入されています。 Limit パラメーター値がゼロ (0) のときは、パターンに一致するすべての グループを戻すことを意味しますが、これは大きなユーザー・レジストリー の場合には問題が発生する可能性があるため、注意して使用する必要があります。カスタム・レジストリーの実装は、 少なくともワイルドカード検索 (*) をサポートすることが求められます。例えば、アスタリスクのパターン (*) はすべてのユーザーを戻し、パターン (b*) は b で始まるユーザーを戻します。public Result getGroups(String pattern, int limit) throws CustomRegistryException, RemoteException;
戻りパラメーターは、com.ibm.websphere.security.Result タイプのオブジェクトです。 このオブジェクトには、java.util.List および java.lang.boolean 属性が含まれます。 リストには戻されたグループが含まれ、ブール・フラグがユーザー・レジストリー内に検索パターンに合う有効なグループがさらにあるかどうかを示します。 このブール・フラグは、 レジストリーに有効なグループがさらにあるかどうかをクライアントへ示すために使用されます。
FileRegistrySample.java サンプル・ファイルの場合、getUsers メソッドはユーザー・レジストリーから必要な数のグループを取り出し、それらを Result オブジェクト内にリストとして設定します。 要求数を超えるグループがあるかどうかを調べるために、サンプルでは、要求した数よりも 1 つ多くユーザーを入手し、追加ユーザーを検出した場合は、ブール・フラグを true に設定します。 パターン・マッチングの場合は、RegExpSample クラスの match メソッド が使用されます。これは、アスタリスク (*) および疑問符 (?) などの文字 をサポートします。
このメソッドは、グループをロールにマッピングするさまざまなパネルで 、グループをロールに追加するために、管理コンソールによって呼び出されます。 管理コンソールは、 ユーザー・レジストリー内にパターンに一致する有効な項目がさらにあることを示すために 、Result オブジェクト内に設定されたブール値を使用します。
WebSphere Application Server バージョン 4 では、このメソッドは Pattern パラメーターしか取らず、戻り値はリストでした。 WebSphere Application Server バージョン 5.x 以降では、このメソッドは、Limit パラメーターを取るように変更されました。 しきい値を取り、戻されるユーザーを制限するように変更してください。 戻り値は変更され、リストと、さらに項目が存在するかを示すフラグから構成される Result オブジェクトを戻すようになりました。 Result.setList(List) メソッドを使用して Result オブジェクトにリストを設定してください。Limit パラメーター内に要求したよりも多くの項目がある場合、Result.setHasMore メソッドを使用して Result オブジェクト内でブール属性を true に設定してください。 Result オブジェクト内のデフォルトのブール属性は、false です。
- getGroupDisplayName(String) でグループの表示名を取得します。
getGroupDisplayName メソッドは、グループの表示名が存在する場合にそれを戻します。 表示名は、いくつかのユーザー・レジストリーに設定できるグループを説明 するオプションのストリングです。 この名前は、 グループの記述名であり、 レジストリーで固有である必要はありません。 レジストリーにグループの表示名が必要ない場合は、 このメソッドに対してヌルまたは空ストリングを戻します。public String getGroupDisplayName(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、 指定されたグループ名と一致する名前を持つグループの表示名を戻します。 表示名が存在しない場合は、空ストリングが戻されます。
この製品では、このメソッドを呼び出して、管理コンソールで、またはコマンド行で wsadmin ツールを使用することによって、表示名を表示することができます。 このメソッドは、表示のためにのみ使用します。
- getUniqueGroupId(String) でグループの固有 ID を取得します。
このメソッドはセキュリティー名を指定されたグループの固有 ID を戻します。public String getUniqueGroupId(String groupSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、 指定された ID と一致する固有 ID を持つグループのセキュリティー名を戻します。 このメソッドによって、指定の uniqueGroupId ID に対して有効なグループが存在することが確認されます。
- getUniqueGroupIds(String) でユーザーが所属するすべてのグループの固有 ID を取得します。
このメソッドは、 ユーザーが属するすべてのグループの固有 ID を戻します。public List getUniqueGroupIds(String uniqueUserId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、この uniqueUserID ID を含むすべて のグループの固有 ID を戻します。 このメソッドは、ユーザー用のクレデンシャルを作成するとき呼び出されます。 クレデンシャルの作成の一環として、 リソースへのアクセスがグループに与えられるときに、 このユーザーが属するすべての groupUniqueIds ID が収集され、 許可のためにクレデンシャル内に配置されます。
- getGroupSecurityName(String) でグループのセキュリティー名を取得します。
このメソッドは、固有 ID を指定されたグループのセキュリティー名を戻します。public String getGroupSecurityName(String uniqueGroupId) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、 指定された ID と一致する固有 ID を持つグループのセキュリティー名を戻します。 このメソッドによって、指定の uniqueGroupId ID に対して有効なグループが存在することが確認されます。
- グループがレジストリーで有効なグループであるかどうかを isValidGroup(String) で決定します。
このメソッドは、 指定グループがレジストリー内で有効なグループであるかどうかを示します。public boolean isValidGroup(String groupSecurityName) throws CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、 グループがレジストリー内にある場合は true を、ない場合は false を戻します。 このメソッドが主に使用されるのは、 グループがディレクトリーに存在するかどうかを知ることによって 今後の問題を回避できる場合です。
- getGroupsForUser(String) でユーザーが所属するすべてのグループを取得します。
このメソッドは、 提供された名前に一致する名前を持つユーザーが属するすべてのグループを戻します。 このメソッドは 、getUniqueGroupIds メソッドと似ています。 ただし、固有 ID ではなく、セキュリティー名が使用されます。public List getGroupsForUser(String userSecurityName) throws EntryNotFoundException, CustomRegistryException, RemoteException;
FileRegistrySample.java サンプル・ファイルの場合、このメソッドは、userSecurityName 名を含むグループのセキュリティー名をすべて戻します。
このメソッドは、管理コンソールまたはスクリプト・ツールによって呼び出され、 RunAs ロールに入力されたユーザーが、 既にユーザーやグループからロールへのマッピングでそのロールに指定されているどうかを検証します。 ロール・マッピングに対するユーザーやグループのロールに、所属するグループを介して直接的または間接的に割り当てられていないユーザーは、RunAs ロールに追加することができないため、このチェックが必要となります。 このユーザーが所属するグループは、 ロール・マッピングに対するユーザーやグループのロールの一部であるため、このメソッドが呼び出されて、 このユーザーが所属するグループがこのロールにマッピングされているかどうかがチェックされます。
- getUsersForGroup(String,int) で指定したグループからユーザーを検索します。
このメソッドは、指定したグループからユーザーを検索します。 戻されるユーザーの数は、Limit パラメーターによって制限されます。Limit パラメーター値がゼロ (0) のときは、そのグループのすべてのユーザーを戻すことを示します。 このメソッドが、WebSphere Application Server セキュリティー・コンポーネントによって直接呼び出されることはありません。 ただし、このメソッドは他のコンポーネントによって呼び出されることがあります。 まれなケースですが、 いずれかのグループからすべてのユーザーを取得することが実用的でない状 況でユーザー・レジストリーを使用する場合は、 特定のグループに対して NotImplementedException 例外を作成することができます。 この場合は、Process Choreographer がインストールされている場合に、スタッフ割り当てがこれら特定のグループを使用してモデル化されないことを確認してください。 ユーザー・レジストリー内のグループからユーザーを戻す必要がない場合は、 このメソッドを実装する際に NotImplemented 例外を作成しないことをお勧めします。public Result getUsersForGroup(String groupSecurityName, int limit) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
戻りパラメーターは、com.ibm.websphere.security.Result タイプのオブジェクトです。 このオブジェクトには、java.util.List および java.lang.boolean 属性が含まれます。 リストには戻されたユーザーが含まれ、ブール・フラグがユーザー・レジストリー内に検索パターンに合う有効なユーザーがさらにあるかどうかを示します。 このブール・フラグは、 ユーザー・レジストリーに有効なユーザーがあるかどうかをクライアントに示します。
例では、このメソッドは、Limit パラメーターがゼロ (0) に設定されていない場合、 要求した数より 1 つ多くのユーザーをグループ用に入手します。 メソッドが 1 つ多くのユーザーを入手できた場合は、ブール・フラグが true に設定されます。
WebSphere Application Server バージョン 4 では、この getUsers メソッドは製品に必須です。WebSphere Application Server バージョン 5.x 以降では、このメソッドは、要求されるユーザーのセットを取得することが実用的でない場合に、例外 NotImplementedException を作成できます。 ただし、この例外が作成されるのはまれであり、その他のコンポーネントが影響を受ける可能性がある場合などに 限られます。 バージョン 4 では、このメソッドは Pattern パラメーターのみを受け入れて、 リストを戻します。 バージョン 5 では、このメソッドで Limit パラメーターも使用できます。しきい値を取り、戻されるユ ーザーを制限するように、実装を変更してください。 戻り値は、リストと、さらに項目が存在するかを示すフラグから構成される Result オブジェクトを戻すように変更されます。 リストが戻されたときに、Result.setList(List) メソッドを使用して Result オブジェクトにリストを設定してください。 Limit パラメーター内に要求したよりも多くの項目がある場合、Result.setHasMore メソッドを使用して Result オブジェクト内でブール属性を true に設定してください。 Result オブジェクト内のデフォルトのブール属性は、false です。
- createCredential(String) メソッドを実装します。 重要: 次のコード・サンプルの最初の 2 行は、説明のためにのみ、分割されています。
WebSphere Application Server の本リリースでは、createCredential メソッドは呼び出されません。 null を戻すことができます。 例では、null 値が戻されます。public com.ibm.websphere.security.cred.WSCredential createCredential(String userSecurityName) throws NotImplementedException, EntryNotFoundException, CustomRegistryException, RemoteException;
次のタスク


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_users
ファイル名:tsec_users.html