Oracle® Fusion Middleware Identity Governance Framework ArisID API開発者ガイド 11g (11.1.1) B66695-01 |
|
![]() 前 |
![]() 次 |
この章では、ユーザーおよびロールAPIからArisID APIへのアプリケーションの移行方法について説明します。
この章には、次の項目が含まれます。
『Oracle Fusion Middlewareアプリケーション・セキュリティ・ガイド』および『Oracle Fusion Middleware Oracle Platform Security ServicesユーザーおよびロールJava APIリファレンス』に記載されているユーザーおよびロールAPIを使用するアプリケーションがある場合、そのかわりにArisID Beanを使用するよう変更できます。
まず、アプリケーションが単純か複雑かを判断する必要があります。
次の特性がある場合、アプリケーションは単純です。
ユーザー属性は、LDAP inetorgperson
オブジェクト・クラスに属します。
ロール属性は、LDAP groupofuniquenames
オブジェクト・クラスに属します。
検索フィルタには、属性値に対するand
条件のみがあります。
標準のユーザーロールjarファイルが要件を満たします。
関連項目:
|
これ以外のアプリケーションはすべて複雑なアプリケーションと分類されます。
カスタム属性を追加せずに標準のユーザーおよびロール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アプリケーション・セキュリティ・ガイド』を参照してください。
次の検索オプションがあります。
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
: アプリケーションのページ・サイズ
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
: アプリケーションのページ・サイズ。
次のフィルタに基づいて検索できます。
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"));
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ファイルを編集して対話を作成できます。
Identity Governance Framework ArisID JDeveloper拡張を使用して、CARMLファイルを作成および編集し、Beanを生成します。詳細は、第3章「アプリケーションの開発」を参照してください。
後続の表で次のAPIをArisID 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); |
これは、マッピング構成の一部です。 |
表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)を介して使用可能です。 |