ヘッダーをスキップ
Oracle® Fusion Middleware Identity Governance Framework ArisID API開発者ガイド
11g (11.1.1)
B66695-01
  目次へ移動
目次

前
 
次
 

4 ユーザーおよびロールAPIからArisID APIへの移行

この章では、ユーザーおよびロールAPIからArisID APIへのアプリケーションの移行方法について説明します。

この章には、次の項目が含まれます。

概要

『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』および『Oracle Fusion Middleware Oracle Platform Security ServicesユーザーおよびロールJava APIリファレンス』に記載されているユーザーおよびロールAPIを使用するアプリケーションがある場合、そのかわりにArisID Beanを使用するよう変更できます。

まず、アプリケーションが単純か複雑かを判断する必要があります。

次の特性がある場合、アプリケーションは単純です。

これ以外のアプリケーションはすべて複雑なアプリケーションと分類されます。

単純なアプリケーションの移行

カスタム属性を追加せずに標準のユーザーおよびロールAPIを使用していた場合、この手順に従ってArisID APIに移行できます。

単純なアプリケーションを移行するには、次のようにします。この手順は、Java EEアプリケーションにのみ適用されます。

アプリケーションの初期化

ArisID APIを使用するようアプリケーションを初期化します。

import oracle.igf.userrole.UserManager;
import oracle.igf.userrole.RoleManager;
import org.openliberty.arisidbeans.ArisIdConstants;
import org.openliberty.arisidbeans.PropertyFilterValue;
HashMap env = new HashMap();

SECURITY_PRINCIPALおよびSECURITY_CREDENTIALSはオプションです。使用されない場合、アプリケーションは、ドメイン・レベルで構成されている資格証明を使用してバックエンドに接続します。

env.put(ArisIdConstants.SECURITY_PRINCIPAL, "cn=orcladmin");
env.put(ArisIdConstants.SECURITY_CREDENTIALS, "mypassword");

ユーザー・マネージャおよびロール・マネージャのオブジェクトを作成します。

UserManager userMgr = new UserManager(env);
RoleManager roleMgr = new RoleManager(env);                 

APIがOracle Platform Security Servicesに構成されているデフォルトのアイデンティティ・ストアに接続する場合、ホストとポートの詳細は、アイデンティティ・ストアから自動的に取得されます。APIがデフォルト以外のアイデンティティ・ストアに接続する場合、次の構成が必要です。

  • システム・プロパティigf.ovd.config.dirが、アイデンティティ仮想化ライブラリ構成ファイルを含むディレクトリを指すよう設定します。

  • アイデンティティ仮想化ライブラリ内の各アダプタをホストとポートの詳細(ホスト、ポート、ルートdn、プラグインなど)を使用して構成します。

アイデンティティ仮想化ライブラリの詳細は、『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』を参照してください。

検索操作の実行

次の検索オプションがあります。

SearchByGuid

searchUserByGuid()メソッドの1つを使用し、GUIDに基づいて検索できます。次に例を示します。

User myObject = userMgr.searchUserByGuid(String guidValue);

検索対象のコンテキストを指定して検索することもできます。

User myObject = userMgr.searchUserByGuid(String guidValue, Map appCtx); 
 

appCtxには、次の詳細を含めることができます。

  • APP_CTX_AUTHUSER: プリンシパル(検索の実行に使用されるアプリケーション・プリンシパル)

  • APP_CTX_LOCALE: ユーザー・ロケール(ロケール固有の値を持つすべての属性に適用可能)

  • APP_CTX_PAGE: アプリケーションのページ・サイズ

SearchByName

searchUser()メソッドの1つを使用し、loginidに基づいて検索できます。次に例を示します。

User myObject = userMgr.searchUser(String loginid);

検索対象のコンテキストを指定して検索することもできます。

User myObject = userMgr.searchUser(String loginid, Map appCtx);

appCtxには、次の詳細を含めることができます。

  • APP_CTX_AUTHUSER: プリンシパル(検索の実行に使用されるアプリケーション・プリンシパル)

  • APP_CTX_LOCALE: ユーザー・ロケール(ロケール固有の値を持つすべての属性に適用可能)

  • APP_CTX_PAGE: アプリケーションのページ・サイズ。

SearchUsers

次のフィルタに基づいて検索できます。

List myUsers = userMgr.searchUsers(java.util.List<org.openliberty.arisidbeans.PropertyFilterValue> attrFiltersList));

attrFiltersListは、次のようにして作成できます。

attrFilters = new ArrayList<PropertyFilterValue>();
attrFilters.add(new PropertyFilterValue("firstname", "abc"));
attrFilters.add(new PropertyFilterValue("lastname", "xyz"));

SearchByPage

ArisID APIでは、ページネーションがサポートされます。次のようにして、searchUsersByPage()を使用してユーザーを検索できます。

SearchResults<User> sResult = userMgr.searchUsersByPage(java.util.List
 <org.openliberty.arisidbeans.PropertyFilterValue> attrFiltessList));
while (sResult.hasMore()) {
    List<User> users = sResult.getNextSet();
    for (int i = 0; i < users.size(); i++)
// Process each user entry fetched
        Util.printObject(users.get(i));
}

複雑なアプリケーションの移行

複雑なアプリケーションの場合、カスタムCARMLファイルを作成してArisID Beanを生成する必要があります。単純なアプリケーションと同様に検索コードを移行できます。ただし、追加の事前処理が必要です。次のようにします。

新規属性の識別

アプリケーションにカスタム属性(inetorgpersonでサポートされていない属性)が必要な場合、アプリケーション固有のCARMLファイルを作成する必要があります。CARMLファイルを編集して、CARMLファイルのデータ定義部分に属性の定義を追加する必要があります。

対話の識別

デフォルトのArisID Bean対話は、ユーザーおよびロール・エントリのすべての属性にアクセスするよう設計されています。パフォーマンス上の理由から、アプリケーションにカスタムの対話が必要な場合、CARMLファイルを編集して対話を作成できます。

JDeveloper拡張を使用したArisID Beanの生成

Identity Governance Framework ArisID JDeveloper拡張を使用して、CARMLファイルを作成および編集し、Beanを生成します。詳細は、第3章「アプリケーションの開発」を参照してください。

環境の設定

CARMLファイルをアプリケーションから使用できるようにします。BeanGeneratorによって生成されたクラスをアプリケーションの一部として含めるか、CLASSPATH環境変数で使用可能にします。

検索操作の実行

検索操作は、単純なアプリケーションの移行の場合と同じです。「検索操作の実行」を参照してください。

ユーザーおよびロールAPIとAris ID APIとの比較

後続の表で次のAPIをArisID APIと比較します。

ユーザー関連API

表4-1に、ユーザー関連APIのメソッドと、Identity Governance Framework Aris ID APIで使用可能な、対応するアイデンティティBeanのメソッドとの比較を示します。

2つのアスタリスク(**)が付けられたアイデンティティBeanのメソッドには、オプションのパラメータMap<String.Object> appCtxMapがあります。たとえば、UserManager.createUser(List<PropertyValue> attrVals, Map<String,Object> appCtxMap)です。appCtxMapには、次の要素を含めることができます。

  • UserManager.APP_CTX_AUTHUSER: java.security.Principal。実行主体のユーザー・コンテキスト。

  • UserManager.APP_CTX_PAGE: ページ・サイズの文字列値。これは、SearchResultsオブジェクトを返す検索メソッドについてのみ適用されます。

  • UserManager.APP_CTX_LOCALE: 言語コードの文字列値。

表4-1 ユーザー関連APIとArisID APIとの比較

機能 ユーザー/ロールAPIのメソッド アイデンティティBeanのメソッド

ユーザーの作成

User UserManager.createUser(String name, char[] password)

User UserManager.createUser(String name, char[] password, PropertySet pset)

** void UserManager.createUser(List<PropertyValue> attrVals)

ユーザーの削除

void UserManager.dropUser(UserProfile user)

void UserManager.dropUser(User user);

** void UserManager.dropUser(IPrincipalIdentifier

** void UserManager.dropUser(String SubjectId)

** void UserManager.dropUser(User subj)

ユーザーの認証

User UserManager.authenticateUser(String user_id, char[] passwd)

User UserManager.authenticateUser(User user, char[] passwd)

User UserManager.authenticateUser(String user_id, String authProperty, char[] passwd)

** User UserManager.authenticateUser(List<PropertyFilterValue> attrFiltersList)

** User UserManager.authenticateUser(String uid, String password)

ユーザーの作成がサポートされているかどうかのチェック

boolean UserManager.isCreateUserSupported()

boolean UserManager.isCreateUserSupported()

ユーザーの変更がサポートされているかどうかのチェック

boolean UserManager.isModifyUserSupported()

boolean UserManager.isModifyUserSupported()

ユーザーの削除がサポートされているかどうかのチェック

boolean UserManager.isDropUserSupported()

boolean UserManager.isDropUserSupported()

指定された検索基準によるユーザーの検索

SearchResponse IdentityStore.searchUsers(SearchParameters params)

** List<User> UserManager.searchUsers(List<PropertyFilterValue> attrFiltersList)

** SearchResults<User> UserManager.searchUsersbyPage(List<PropertyFilterValue> attrFiltersList)

名前/一意の名前/guidによるユーザーの検索

User IdentityStore.searchUser(String name)

** User UserManager.searchUser(List<PropertyFilterValue> attrFiltersList)

** User UserManager.searchUser(String loginid)

特定のユーザー・オブジェクトのリポジトリにユーザーが存在するかどうかのチェック

boolean IdentityStore.exists (User user)

boolean UserManager.exists(User subj)

単純な検索フィルタ(1つの名前、タイプおよび値に基づいた検索)

SimpleSearchFilter

CARMLファイル内の検索対話に対して定義されたフィルタ

複雑な検索フィルタ(フィルタ条件とネストしたフィルタを使用した複数の属性に基づいた検索)

ComplextSearchFilter

検索の基準となる実際の属性がCARMLファイルにあらかじめ定義されている場合に制限付きでサポートされます。

指定されたプロパティ名に対するプロパティ値の取得

String User.getPropertyVal(String propName)

注意: ユーザー・ロールAPIはキャッシュから属性値をフェッチします。キャッシュにない場合、リポジトリからフェッチします。

String User.getAttributeValue(String attribute)

boolean User.getPredicateValue(String predicate)

Object User.getPropertyValue(String property)

制限: リポジトリからすでにフェッチされているユーザー・オブジェクトから属性値を返します。リポジトリに再度アクセスして最新の値をフェッチすることはありません。これは、値の取得のすべてのバリエーションに適用されます。

指定されたプロパティ名に対するユーザー・プロパティの取得

Property User.getProperty(String propName)

IAttributeValue User.getAttribute(String attribute)

PredicateValue User.getPredicate(String predicate)

Object User.getProperty(String property)

指定されたプロパティ名のセットに対するユーザー・プロパティの取得

Map User.getProperties()

Map<String,IAttributeValue> User.getAllAttributes()

Map<String,PredicateValue> User.getAllPredicates()

Map<String,Object> User.getAllProperties()

すべてのユーザー・プロパティ名のスキーマからの取得

List IdentityStore.getUserPropertyNames()

注意: スキーマ内のすべてのプロパティの名前を返します。

List<String> UserManager.getAllAttributeNames()

List<String> UserManager.getAllPredicateNames()

List<String> UserManager.getAllPropertyNames()

ユーザーのリポジトリ内の属性値の変更

void User.setProperty(ModProperty mprop)

void User.setAttributeValue(String attrName, String attrValue)

void User.setAttribute(ModPropertyValue attr)

ユーザーのリポジトリ内の属性値のセットの変更

void User.setProperties(ModProperty[] modPropObjs)

void User.setProperties(LdapContext ctx, ModProperty[] modPropObjs)

void User.setAttributes(List<ModPropertyValue> attrs)

ユーザーの直接または間接のすべてのレポートの取得

SearchResponse User.getReportees(boolean direct)

** List<User> UserManager.getReportees(User user, int nLevels)

ユーザーの管理チェーンの取得

List User.getManagementChain(int max, String upToManagerName, String upToTitle)

** List<User> UserManager.getManagementChain(User user, int nLevels, String title, String manager)

バイナリ属性の取得/設定

使用可能。

ユーザー/ロールAPIのプロパティでは、バイナリ属性がサポートされます。

byte[] user.getJPEGPhoto()

void user.setJPEGPhoto(String imgpath)

使用可能。

byte[] User.getJpegphoto()

void User.setJpegphoto(byte[] value)

レルムの選択

使用可能。

env.put(OIDIdentityStoreFactory.RT_SUBSCRIBER_NAME, "<realm dn>");

IdentityStoreFactory.getIdentityStoreInstance(env);

これは、マッピング構成の一部です。


ロール関連API

表4-2に、ロール関連APIのメソッドと、Identity Governance Framework Aris ID APIで使用可能な、対応するアイデンティティBeanのメソッドとの比較を示します。

2つのアスタリスク(**)が付けられたアイデンティティBeanのメソッドには、オプションのパラメータMap<String.Object> appCtxMapがあります。たとえば、RoleManager.searchRolesbyPage(List<PropertyFilterValue> attrFiltersList, Map<String,Object> appCtxMap)です。appCtxMapには、次の要素を含めることができます。

  • UserManager.APP_CTX_AUTHUSER: java.security.Principal。実行主体のユーザー・コンテキスト。

  • UserManager.APP_CTX_PAGE: ページ・サイズの文字列値。これは、SearchResultsオブジェクトを返す検索メソッドについてのみ適用されます。

  • UserManager.APP_CTX_LOCALE: 言語コードの文字列値。

表4-2 ロール関連APIとArisID APIとの比較

機能 ユーザー/ロールAPIのメソッド アイデンティティBeanのメソッド

ロールの作成

Role RoleManager.createRole(String name, int scope)

Role RoleManager.createRole(String name)

** void RoleManager.createRole(List<PropertyValue> attrVals)

ロールの削除

void RoleManager.dropRole(RoleProfile role)

void RoleManager.dropRole(Role role)

** void RoleManager.dropRole(IPrincipalIdentifier principal)

** void RoleManager.dropRole(Role subj)

ロールの作成がサポートされているかどうかのチェック

boolean RoleManager.isCreateRoleSupported()

boolean RoleManager.isCreateRoleSupported()

ロールの変更がサポートされているかどうかのチェック

boolean RoleManager.isModifyRoleSupported()

boolean RoleManager.isModifyRoleSupported()

ロールの削除がサポートされているかどうかのチェック

boolean RoleManager.isDropRoleSupported()

boolean RoleManager.isDropRoleSupported()

グループがユーザーによって所有されているか

boolean RoleManager.isGranted(Role parent, Principal principal)

** boolean RoleManager.isGranted(Role role, Role member, boolean direct)

** boolean RoleManager.isGranted(Role role, User member, boolean direct)

グループがユーザーによって所有されているか

boolean RoleManager.isOwnedBy(Role parent, Principal principal)

** boolean RoleManager.isOwned(Role role, Role owner, boolean direct)

** boolean RoleManager.isOwned(Role role, User owner, boolean direct)

グループがユーザーによって管理されているか

boolean RoleManager.isManagedBy(Role parent, Principal principal)

** boolean RoleManager.isManaged(Role role, Role manager, boolean direct)

** boolean RoleManager.isManaged(Role role, User manager, boolean direct)

ロールの直接または間接のすべてのメンバーの取得

SearchResponse Role.getGrantees(SearchFilter filter, boolean direct)

** List<User> RoleManager.getGrantees(Role role, int nLevels, UserManager usermanager)

ユーザーをメンバーとしてロールに追加

void RoleManager.grantRole(Role parent, Principal principal)

** void Role.addMember(Role role)

** void Role.addMember(String value)

** void Role.addMember(User user)

ロールのメンバーからユーザーを削除

void RoleManager.revokeRole(Role parent, Principal principal)

** List<User> RoleManager.getOwners(Role role, int nLevels, UserManager usermanager)

特定のロールの直接または間接のすべての所有者の取得

SearchResponse Role.getOwners(SearchFilter filter, boolean direct)

SearchResponse Role.getOwners(SearchFilter filter)

** List<User> RoleManager.getOwners(Role role, int nLevels, UserManager usermanager)

ユーザーを所有者としてロールに追加

void Role.addOwner(Principal principal)

** void Role.addOwner(Role role)

** void Role.addOwner(String value)

** void Role.addOwner(User user)

ロールの所有者からユーザーを削除

void Role.removeOwner(Principal principal)

** void Role.deleteOwner(Role role)

** void Role.deleteOwner(String value)

** void Role.deleteOwner(User user)

ロールの直接または間接のすべての管理者の取得

SearchResponse Role.getManagers(SearchFilter filter, boolean direct)

SearchResponse Role.getManagers(SearchFilter filter)

** List<User> RoleManager.getManagers(Role role, int nLevels, UserManager usermanager)

ユーザーをロールの管理者として追加

void Role.addManager(Principal principal)

** void Role.addManager(Role role)

** void Role.addManager(String value)

** void Role.addManager(User user)

ロールの管理者からユーザーを削除

void Role.removeManager(Principal principal)

** void Role.deleteManager(Role role)

** void Role.deleteManager(String value)

** void Role.deleteManager(User user)

ロールのプロパティの取得

Property Role.getProperty(String propName)

注意: ユーザー・ロールAPIはキャッシュからこれらの属性値をフェッチします。キャッシュにない場合、リポジトリからフェッチします。

IAttributeValue Role.getAttribute(String attribute)

PredicateValue Role.getPredicate(String predicate)

Object Role.getProperty(String property)

ロール・タイプの確認

Role.isApplicationRole

Role.isEnterpriseRole

Role.isSeeded


指定された検索基準に対するロールの検索

SearchResponse IdentityStore.searchRoles(int scope, SearchParameters params)

** List<Role> RoleManager.searchRoles(List<PropertyFilterValue> attrFiltersList)

** SearchResults<Role> RoleManager.searchRolesbyPage(List<PropertyFilterValue> attrFiltersList)

名前/一意の名前/guidによるロールの検索

Role IdentityStore.searchRole(int searchType, String value)

** Role RoleManager.searchUser(List<PropertyFilterValue> attrFiltersList)

** Role RoleManager.searchUser(String guid)

指定されたフィルタに対するユーザーとロールの検索

SearchResponse IdentityStore.search(SearchParameters params)

これは、別々のメソッド(UserManager.searchUsersとRoleManager.searchRoles)を介して使用可能です。