Fusion Middleware Identity Governance Framework ArisID API開発者ガイド

11g (11.1.1)

B66695-01(原本部品番号:E16588-02)

目次

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 Identity Governance Framework ArisID APIの使用

- Identity Governance Frameworkについて

- 組織にとっての利点

- 開発者にとっての利点

- Identity Governance Framework ArisID APIについて

- ArisID APIを使用したアプリケーションの開発

- CARMLファイルの構成

- アイデンティティ・リポジトリの構成

- マッピング・ファイルの構成

- システム要件および動作保証

2 設計に関する推奨事項

- LoginIDの選択

- UniqueKeyの選択

- 複数言語サポートの指定

- 大規模な結果の処理

- アプリケーションの保護

- ドメイン・レベルの資格証明

- アプリケーション・レベルの資格証明

3 アプリケーションの開発

- Identity Governance Framework ArisID APIの使用

- プロジェクトの作成

- CARMLファイルの作成と編集

- ArisID Beanの生成

- アプリケーションでのArisID Beanの使用方法

- マッピング・ファイルの編集

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

- 概要

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

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

- 検索操作の実行

- SearchByGuid

- SearchByName

- SearchUsers

- SearchByPage

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

- 新規属性の識別

- 対話の識別

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

- 環境の設定

- 検索操作の実行

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

- ユーザー関連API

- ロール関連API

A サンプル・アプリケーション

- SearchUsers.jsp

- SearchUsers.html

図一覧

- 1-1 IGF ArisID APIアーキテクチャ

表一覧

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

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

Oracle® Fusion Middleware

Identity Governance Framework ArisID API開発者ガイド

11g (11.1.1)

B66695-01(原本部品番号:E16588-02)

2011年2月

Oracle Fusion Middleware Identity Governance Framework ArisID API開発者ガイド, 11g (11.1.1)

B66695-01

Copyright (C) 2011, Oracle and/or its affiliates.All rights reserved.

原本著者:  Ellen Desmond

原本協力著者:  Venkat Medam、Vasuki Ashok、Trish Fuzesy

原本協力者: Amit Sharma、Mark Wilcox

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントが、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供される場合は、次のNoticeが適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアを危険が伴うアプリケーションで使用する際、このソフトウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

このソフトウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

このガイドでは、Identity Governance Framework ArisID Oracle JDeveloper拡張を使用して、Identity Governance Framework ArisID APIを実装するOracle Fusion Middlewareアプリケーションを作成する方法について説明します。

対象読者

このドキュメントは、Oracle Fusion Middleware Identity Governance Framework ArisID APIを使用するアプリケーションを記述する開発者を対象としています。

ドキュメントのアクセシビリティについて

オラクル社は、障害のあるお客様にもオラクル社の製品、サービスおよびサポート・ドキュメントを簡単にご利用いただけることを目標としています。オラクル社のドキュメントには、ユーザーが障害支援技術を使用して情報を利用できる機能が組み込まれています。HTML形式のドキュメントで用意されており、障害のあるお客様が簡単にアクセスできるようにマークアップされています。標準規格は改善されつつあり、オラクル社はドキュメントをすべてのお客様がご利用できるように、市場をリードする他の技術ベンダーと積極的に連携して技術的な問題に対応しています。Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/accessibility/を参照してください。

ドキュメント内のサンプル・コードのアクセシビリティについて

スクリーン・リーダーは、ドキュメント内のサンプル・コードを正確に読めない場合があります。コード表記規則では閉じ括弧のみを行に記述する必要があります。しかし、一部のスクリーン・リーダーは括弧のみの行を読まない場合があります。

外部Webサイトのドキュメントのアクセシビリティについて

このドキュメントにはオラクル社およびその関連会社が所有または管理しないWebサイトへのリンクが含まれている場合があります。オラクル社およびその関連会社は、それらのWebサイトのアクセシビリティに関しての評価や言及は行っておりません。

Oracleサポートへのアクセス

Oracleカスタマは、My Oracle Supportから電子サポートにアクセスできます。詳細は、http://www.oracle.com/support/contact.htmlまたはhttp://www.oracle.com/accessibility/support.html (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- 『Oracle Fusion Middleware Identity Governance Framework UserRole APIリファレンス』

- 『Oracle Fusion Middleware Identity Governance Framework IDXUserRole APIリファレンス』

- Identity Governance Framework ArisID JDeveloper拡張のオンライン・ヘルプ

- Project Aristotle - ArisID Attribute ServicesのJavadoc (http://arisid.sourceforge.net/javadocs/arisId_1.1_javadoc/)。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 Identity Governance Framework ArisID APIの使用

この章では、Identity Governance Framework ArisID API (ArisID API)のアーキテクチャと主要な機能について説明します。ArisID APIは、エンタープライズ開発者とシステム設計者に、複数のアイデンティティ・プロトコルを使用したアイデンティティ対応のアプリケーションを作成するためのライブラリを提供します。ArisID APIでは、開発者は、Client Attribute Requirements Markup Language (CARML)を使用して、アイデンティティの属性、ロールおよび検索フィルタの要件を指定できます。

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

- Identity Governance Frameworkについて

- Identity Governance Framework ArisID APIについて

- ArisID APIを使用したアプリケーションの開発

Identity Governance Frameworkについて

Identity Governance Framework (IGF)は、次の目標を実現するために設計されたオープン・イニシアチブです。

- 格納場所に関係なく、アイデンティティ情報の開発を簡易化すること。

- アプリケーションでのアイデンティティ・データ(特に、機密データ)の使用方法の管理(ガバナンスとも呼ばれる)を簡易化すること。

このイニシアチブの一員として、オラクル社は主な初期の仕様を提供し、コミュニティで使用できるようにしています。これらの仕様では、使用法のポリシー、属性要件およびアイデンティティ関連の情報の使用に関係する開発者APIを定義するための共通のフレームワークが提供されます。これらによって、ビジネスは、システムおよびアプリケーション全体でのアイデンティティ関連のデータの使用、格納および伝播に関係なく、ドキュメント化、制御および監査を完全に行うことができます。

組織にとっての利点

組織は、顧客、従業員および取引先に関する個人の機密情報の制御と保全を保つ必要があります。社会保障番号、クレジット・カード番号、病歴などに関連するデータは、この種の情報の悪用や盗用を防ぐよう求める規制によって一層の注意が求められています。プライバシに配慮する組織が、業務の妨げとなったり、生産性、柔軟性および効率に影響するような過度に厳格な制御とプロセスを施行してこれらの要求に応えようとすることが多々あります。反対に、この情報を保護するために必要な措置をとらず、十分な監視と制御を行わずにアイデンティティ関連のデータを潜在的に危険な状態にする組織もあります。Identity Governance Frameworkによって、エンタープライズ用の標準ベースのメカニズムで、アプリケーション間で"契約"を結び、データが悪用されたり、危険にさらされたり、置き違えられたりしないという信頼性のもと、アイデンティティ関連の情報を安全に共有できます。このフレームワークを使用すると、組織は、ビジネス全体でのアイデンティティ情報の格納、使用および伝播のされ方を完全に可視化できます。これによって、組織は、アイデンティティ関連の情報の機密性を損なうことなく、ビジネス・プロセスを効率化するための制御を自動化できます。

開発者にとっての利点

Identity Governance Frameworkは、アプリケーションを記述する際のアイデンティティ関連のデータの処理方法の指定について取り決められたプロセスです。これによって、このデータを使用するアプリケーションを簡単に記述し、管理ポリシーを使用して制御できるようにする標準ベースの方法が開発者に提供されます。このことにより、プライバシを考慮したアプリケーションを短期間で開発できるようになります。

IGFによって、アイデンティティに対応するアプリケーションをデプロイ・インフラストラクチャから切り離すことができます。具体的には、IGFを使用すると、開発者は、アイデンティティ関連の情報の格納方法およびアプリケーションによるアクセス方法の決定を遅らせることができます。開発者は、SQLデータベースを使用するか、LDAPディレクトリを使用するか、あるいは他のシステムを使用するかについて悩む必要がなくなります。過去には、開発者は特異性の高いコードの記述を余儀なくされ、テクノロジとベンダーの固定化につながっていました。Client Attribute Requirement Markup Language (CARML)ファイルと宣言を使用することで、継続的に専門的な開発者の増強を必要とせずに、様々な環境での柔軟なデプロイがアプリケーションによってサポートされます。アイデンティティベースの情報については、データの取得、変換およびポリシーの強制といった難しい処理がArisID APIによって行われます。

Identity Governance Framework ArisID APIについて

Identity Governance Framework ArisID APIは、すべてのアイデンティティ情報交換の受渡しに使用される共通のコア・サービスを表します。正式な名称ではありませんが、ArisID APIは、開発者からアイデンティティBeanと呼ばれることが多くあります。

11g (11.1.1)リリースのArisID APIは、次に提案されている構成のサブセットです。

http://www.openliberty.org/wiki/index.php/ArisID_Configuration.

Oracle WebLogic ServerとOracle Identity Managementをインストールしてある場合、このAPIを使用したアプリケーションの開発に必要なjarファイルはすべて、コンピュータにすでにインストールされています。

関連項目:

- Oracle Identity Managementのインストールの詳細は、『Oracle Fusion Middleware Oracle Identity Managementインストレーション・ガイド』を参照してください。

- JDeveloperとその拡張機能のインストールの詳細は、『Oracle Fusion Middleware Oracle JDeveloperインストレーション・ガイド』を参照してください。

Identity Governance Frameworkオープン・ソースAPI jarファイルは次のとおりです。

- openliberty.arisId_1.1.jar: 属性のセットを含むアイデンティティ・サブジェクトの取得に使用されるライブラリ関数とプロバイダを含んだコアArisID APIを提供します。詳細は、http://arisid.sourceforge.net/javadocs/arisId_1.1_javadoc/を参照してください。

- org.openliberty.arisIdBeans_1.1.jar: ArisID APIに加えてJavaオブジェクトの抽象化を提供するArisID Beanを提供します。これらによって、ArisID APIのトランザクション型アプローチをオブジェクトまたはBean型のアプローチに変換します。詳細は、http://arisid.sourceforge.net/javadocs/arisId_1.1_javadoc/を参照してください。

ArisID API jarファイルは次のとおりです。

- idxuserrole.jar: 標準的なユーザーとロールのアイデンティティの読取り専用操作を提供します。このjarは、標準のidxuserrole.xml CARMLファイルから生成されます。詳細は、『Oracle Fusion Middleware Identity Governance Framework IDXUserRole APIリファレンス』を参照してください。

- userrole.jar: アイデンティティ情報を更新するためのユーザーとロールのアイデンティティ読取り/書込み操作を提供します。詳細は、『Oracle Fusion Middleware Identity Governance Framework UserRole APIリファレンス』を参照してください。

- arisId-stack-ovd.jar: このjarファイルはOracle Virtualizationライブラリを使用したIAttrSvcStackインタフェースの実装で、異なるバックエンドに接続し、アイデンティティ・ストア・エンティティの抽象ビューを提供します。

ArisID Beanによって、CARML対話の初期化とアクセスに必要なJava APIが提供されます。Beanジェネレータでは、Apache Velociyを使用してCARMLファイル内の各エンティティに対するjavaファイルのセットを生成します。CARMLファイルは、アプリケーションの属性使用要件を記述する宣言型のドキュメントです。ArisID Beanは、jarファイルidxuserrole.jarおよびuserrole.jar内にあります。標準のArisID Beanがニーズを満たさない場合、CARMLファイルを作成し、Identity Governance Framework ArisID JDeveloper拡張のBeanジェネレータを使用して、新たにArisID Beanを生成できます。

次の図に、ArisID APIアーキテクチャの概要を示します。

図1-1 IGF ArisID APIアーキテクチャ

「図1-1 IGF ArisID APIアーキテクチャ」の説明

ArisID APIを使用したアプリケーションの開発

Identity Governance Framework ArisID拡張では、作成 > 変更 > テスト > デプロイといった基本的な開発プロセスがサポートされます。作成では、新規JDeveloperプロジェクトの開始とCARMLファイルの作成が必要です。CARMLエディタを使用して、環境に合せてCARML XMLファイルを変更します。アプリケーションのテストは、LDAPディレクトリ・サーバーが組み込まれたOracle WebLogic Serverで行えます。

CARMLファイルの構成

CARMLファイルidxuserrole.xml(読取り専用操作)とuserrole.xml(読取り専用および読取り/書込み操作)を確認して、既存のArisID Beanがアプリケーションのニーズを満たすかどうかを判断します。これらのファイルは、DOMAIN_HOME/config/fmwconfig/carmlにあります。追加属性または他のカスタマイズが必要な場合、第3章「アプリケーションの開発」に記載のように、新たにCARMLファイルを作成してBeanを生成します。

アイデンティティ・リポジトリの構成

ArisID Beanによって使用されるアイデンティティ・リポジトリを使用可能にする必要があります。LDAPベースのディレクトリ・サーバーが組み込まれたOracle WebLogic Serverまたは11gのOracle Virtual Directoryでサポートされている任意のLDAPディレクトリを使用できます。ArisID APIは、Oracle Platform Security Servicesと統合されています。Oracle Platform Security Servicesに構成されているLDAPベースのアイデンティティ・ストアに自動的に接続します。このアイデンティティ・ストアは、Oracle Platform Security Servicesでサポートされます。システム要件と動作要件の詳細は、「システム要件と動作要件」を参照してください。

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

Oracle Platform Security Servicesアイデンティティ・ストアとは異なるアイデンティティ・ストアを使用する必要がある場合、次のシステム・プロパティを設定します。

igf.ovd.config.dir=DOMAIN_HOME/config/fmwconfig/arisidprovider/conf

次に、adapters.os_xmlファイルを編集して、接続先のディレクトリのhost、portおよび資格証明を含めます。igf.ovd.config.dirプロパティは、adapaters.os_xmlおよび適切に設定された他の構成ファイルを含む任意のディレクトリに設定できます。

OpenLDAPの場合、Role.MEMBERは次のAPIに必須の属性です。

- createRole(List<PropertyValue> attrVals, Map<String,Object> appCtxMap)

- createRole(List<PropertyValue> attrVals)

入力attrValsリストにRole.MEMBERが含まれていない場合、ロールの作成は失敗します。

マッピング・ファイルの構成

CARMLファイルが作成されている場合、対応するマッピング・ファイルは同じ場所に作成されます。デフォルトのマッピング・ファイルには、Oracle WebLogic Serverに組み込まれているディレクトリ・サーバー(Oracle Platform Security Servicesのデフォルト・アイデンティティ・ストア)に固有の属性詳細が含まれています。デフォルトのCARMLファイルとOracle Platform Security Servicesアイデンティティ・ストアを使用する場合、マッピングを構成する必要ばありません。Oracle Platform Security Servicesの構成パラメータは、マッピング・ファイルのパラメータをオーバーライドします。

追加属性を使用して独自のCARMLファイルを作成する場合、またはOracle Platform Security Servicesアイデンティティ・ストア以外のストアを使用する場合、マッピング・ファイルを編集する必要があります。詳細は、第3章「アプリケーションの開発」を参照してください。

システム要件と動作要件

ハードウェアとソフトウェアの要件、プラットフォーム、データベースおよびその他の情報の詳細は、システム要件と動作要件のドキュメントを参照してください。これらのドキュメントは両方とも、Oracle Technology Network (OTN)で入手できます。

システム要件に関するドキュメントには、ハードウェア要件およびソフトウェア要件、ディスク領域とメモリーの最小要件、必要なシステム・ライブラリ、パッケージ、パッチなどの情報が記載されています。

http://www.oracle.com/technology/software/products/ias/files/fusion_requirements.html

動作保証のドキュメントには、サポートされているインストール・タイプ、プラットフォーム、オペレーティング・システム、データベース、JDKおよびサードパーティ製品が記載されています。

http://www.oracle.com/technology/software/products/ias/files/fusion_certification.html

2 設計に関する推奨事項

デフォルトのCARMLファイルとマッピング・ファイルには、デプロイ・シナリオについて特定の想定がなされています。デプロイ要件によっては、これらの詳細を変更する必要がある場合があります。この章では、変更可能な構成パラメータについて説明します。

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

- LoginIDの選択

- UniqueKeyの選択

- 複数言語サポートの指定

- 大規模な結果の処理

- アプリケーションの保護

LoginIDの選択

デフォルトの構成では、ユーザー・エントリを識別するための一意の識別子としてemailが使用されます。ユーザーの検索時、検索に想定されているデフォルトの属性はemailです。次に例を示します。

SearchUser( String uniqueid,  Map<String, Object>)

パフォーマンス上の理由から、一意の識別子として使用される属性は、バックエンドで検索可能な属性である必要があります。アプリケーションが選択したuniquekeyとバックエンドの属性との間のマッピングは、構成時に処理されます。これは、Oracle Virtual Directoryマッピングでの構成です。HashMapを使用して、操作の実行時に使用するオプションのコンテキスト情報を指定します。現在のリリースでは、次のオプションがサポートされます。

- 検索を実行するプリンシパル・ユーザー: (ArisIdConstants.APP_CTX_AUTHUSER, (Principal)user)

- 言語の制約(ある場合): (ArisIdConstants.APP_CTX_LOCALE, "fr")

- ページネーション・サポート(ある場合): (ArisIdConstants.APP_CTX_PAGESIZE, 10)

UniqueKeyの選択

アプリケーションで、アイデンティティ・リポジトリのバックエンドからアクセスされるエントリをアプリケーション固有のリポジトリに格納することがあります。このような場合、永続化する属性を慎重に検討する必要があります。たとえば、バックエンドがLDAPベースのリポジトリの場合、GUID属性がLDAPベースのバックエンドで唯一の一意のキーであるため、永続化属性としてこれを使用します。他のLDAP属性はすべて変更可能です。

バックエンドがリレーショナル・データベースの場合、一意性制約が適用される属性を一意キーとして選択します。これは、ArisIDマッピング・プロパティ・ファイルで指定できます。一意キーに基づいてユーザーを検索するメソッドは次のとおりです。

searchUserOnUniqueKey(String UniqueKey, Map<String,Object>)

HashMapを使用して、操作の実行時に使用するオプションのコンテキスト情報を指定します。現在のリリースでは、次のオプションがサポートされます。

- 検索を実行するプリンシパル・ユーザー: (ArisIdConstants.APP_CTX_AUTHUSER, (Principal)user)

- 言語の制約(ある場合): (ArisIdConstants.APP_CTX_LOCALE, "fr")

- ページネーション・サポート(ある場合): (ArisIdConstants.APP_CTX_PAGESIZE, "10")

複数言語サポートの指定

ロケール固有の結果を必要とするアプリケーション向けに複数言語サポート(MLS)が提供されます。属性と適切なMLSコードは、ArisIDプロパティ・ファイルのmultiLanguageAttributes要素に格納されます。

<multiLanguageAttributes>…</multiLanguageAttribute>

displaynameは、最もよく使用される複数言語属性であるため、デフォルトで複数言語属性として構成されています。必要に応じて他の属性をArisIDマッピング・ファイルに追加できます。

制限

引数としてロケールが指定されるAPIでは、ArisIDプロパティ・ファイルに<multiLanguageAttributes>としてリストされている、ロケール固有の値を持つすべての属性に対してロケール固有の値が返されます。他の属性についてはすべて、格納されているデフォルト値が返されます。

バックエンドのシステムでは、データはISO-3166に準拠した形式で返されます。たとえば、(英語の他に)フランス語のロケールがある場合、cn属性に対してcn,:frとして格納されます。クライアント・アプリケーションのロケールは、プロパティHashMapにArisIdConstants.APP_CTX_LOCALE, "fr"と指定し、ArisIDプロパティ・ファイルにcnをmultiLanguageAttributeとして含め、この属性をマップします。

大規模な結果の処理

アプリケーションでアイデンティティ・データにアクセスする場合、検索の結果セットが大きすぎてアプリケーションで処理できない場合があります。そのような場合、管理可能なサイズのページに結果を分割することができます。これは、ページで返されるオブジェクトの数を定義することで行います。

次の例に、標準的な使用法を示します。

RoleManager rm = new RoleManager(env);
List<PropertyFilterValue> attrFilters = new  ArrayList<PropertyFilterValue>();
attrFilters.add(new PropertyFilterValue(Role.NAME, "admin", AttributeFilter.OP_CONTAINS));

HashMap<String,Object> map = new HashMap<String,Object>();
map.put("ArisIdConstants.APP_CTX_PAGESIZE","2");
SearchResults<Role> sr = rm.searchRolesbyPage(attrFilters, map);

while(sr.hasMore())
{
List<Role> roles = sr.getNextSet();

for (int i=0; i<roles.size(); i++)
//do the operations with roles.get(i)
}

アプリケーションの保護

ターゲット・システムでの作成、読取り、更新および削除(CRUD)操作の実行に2つのセキュリティ・シナリオを使用できます。それは、次のものです。

- ドメイン・レベルの資格証明

- アプリケーション・レベルの資格証明

このリリースでは、プロキシ認証はサポートされていません。

ドメイン・レベルの資格証明

このシナリオでは、ドメイン内のすべてのアプリケーションで共通の資格証明を使用してターゲット・システムに接続し、その資格証明で操作を実行します。アプリケーションは、ターゲット・システムにフットプリントを保持しません。

LDAPアダプタの構成ファイルadapters.os_xmlには、バックエンド・ディレクトリに接続するための資格証明およびホストとポートの詳細が含まれています。初期化時に他の資格証明を指定しない場合、アプリケーションはLDAPアダプタの構成ファイル内の資格証明を使用してターゲット・システムに接続します。

プロキシ・ユーザー(ログイン・ユーザーID)がAPIのアプリケーション・コンテキストで指定されていない場合、ArisID操作は、LDAPアダプタの構成ファイル内にある資格証明を使用して実行されます。

アプリケーションが共通の資格証明を使用して接続する場合、認可されたユーザーについてのみデータを表示したり、変更するようアプリケーション自体にセキュリティを組み込む必要があります。

コード・サンプル

LDAPアダプタの構成ファイルadapters.os_xmlは、バックエンド・ディレクトリへの接続にドメイン・レベルのユーザーIDと暗号化されたパスワードを使用するよう構成されています。次に示すのは、adapters.os_xmlのスニペットです。

<binddn>cn=admin</binddn>
<bindpass>{OMASK}C2QXW1Nmf+s=</bindpass>

ArisID APIの初期化時、資格証明を指定しません。

Map env = new HashMap();
// Do not set UserManager.SECURITY_PRINCIPAL & SECURITY_CREDENTIALS
UserManager uMgr  = new UserManager(env);
…
…
// Search Operation (with no proxy user in app context)
List<PropertyFilterValue> attrFilters = new ArrayList<PropertyFilterValue>();
attrFilters.add(new PropertyFilterValue("User.FIRSTNAME", "app1", AttributeFilter.OP_CONTAINS));
attrFilters.add(new PropertyFilterValue("User.LASTNAME", "user1", AttributeFilter.OP_BGNSWITH));
Map<String, Object> appCtx = null;
users = um.searchUsers(attrFilters, appCtx);

アプリケーション・レベルの資格証明

このシナリオでは、各アプリケーションでアプリケーション・レベルの資格証明を使用してターゲット・システムに接続し、その資格証明でCRUD操作を実行します。

この場合、ArisID APIの初期化時にアプリケーションのユーザーIDとパスワードを指定します。そうすると、アプリケーションはそれらの資格証明を使用してターゲット・システムに接続します。

プロキシ・ユーザーがAPIのアプリケーション・コンテキストに指定されていない場合、アプリケーションの資格証明を使用してArisID操作が実行されます。

この使用例には、次の機能があります。

- 各アプリケーションは、ターゲット・システムのデータの表示および更新を行うための異なる権限を持ちます。

- ターゲット・システムで各アプリケーションによって行われる変更を監査できます。

コード・サンプル

LDAPアダプタの構成ファイルadapters.os_xmlは、バックエンド・ディレクトリへの接続にドメイン・レベルのユーザーIDと暗号化されたパスワードを使用するよう構成されています。次に示すのは、adapters.os_xmlのスニペットです。

<binddn>cn=admin</binddn>
<bindpass>{OMASK}C2QXW1Nmf+s=</bindpass>

ArisID APIの初期化時、アプリケーションのユーザー資格証明を指定します。

Map env = new HashMap();
env.put(UserManager.SECURITY_PRINCIPAL, "cn=app1_user,cn=users,dc=oracle,dc=com");
env.put(UserManager.SECURITY_CREDENTIALS, "mypassword");
UserManager uMgr  = new UserManager(env);
…
// Search Operation (with no proxy user in app context)
List<PropertyFilterValue> attrFilters = new ArrayList<PropertyFilterValue>();
attrFilters.add(new PropertyFilterValue("User.FIRSTNAME", "app1", AttributeFilter.OP_CONTAINS));
attrFilters.add(new PropertyFilterValue("User.LASTNAME", "user1", AttributeFilter.OP_BGNSWITH));Map<String, Object> appCtx = null;
users = um.searchUsers(attrFilters, appCtx);

3 アプリケーションの開発

この章では、Identity Governance Framework ArisID Oracle JDeveloper拡張を使用してアプリケーションを開発する方法について説明します。

関連項目:
『Oracle Fusion Middleware Oracle JDeveloperインストレーション・ガイド』

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

- Identity Governance Framework ArisID APIの使用

- プロジェクトの作成

- CARMLファイルの作成と編集

- ArisID Beanの生成

- アプリケーションでのArisID Beanの使用方法

- マッピング・ファイルの編集

Identity Governance Framework ArisID APIの使用

ArisID APIを使用してアプリケーションを開発する場合、通常は次のタスクを実行します。

- Oracle JDeveloperでのArisIDプロジェクトの作成。

- CARMLファイルの作成と構成。

- ArisID Beanの生成。

- (オプション)マッピング・ファイルの編集。

Identity Governance Framework ArisID JDeveloper拡張は、複数の異なるパッケージに編成されています。パッケージは主に機能別に分かれています。最上位レベルでは、パッケージは、CARML概要エディタ、リレーションシップ・エディタ、マッピング・エディタ、Beanの生成およびプロジェクトの作成のためのものです。プロジェクトの作成には、プロジェクト構造の作成、プロジェクト・プロパティの管理およびCARMLファイルの作成に必要なすべてのクラスが含まれています。これらのパッケージの多くで共有される共通の要素は共通のままとされます。これは主に、共通のSwingコンポーネントとXML構造の解析/モデリングの抽象クラスです。

プロジェクトの作成

Identity Governance Framework ArisIDを使用するための最初のステップは、Oracle JDeveloperでプロジェクトを作成することです。Identity Governance Framework ArisID拡張をインストールすると、ArisID/IGFプロジェクトがJDevelolperのプロジェクト・ギャラリに追加されます。対応するプロジェクト・ウィザードによって、ArisIDに必要なライブラリの追加、ディレクトリ構造の作成、ArisID構成をテストするためのオプションの追加が行われます。次の図に、JDeveloperに表示されたサンプルのArisIDプロジェクトとディレクトリ構造を示します。

図igfdg_jdev_project.gifの説明

プロジェクトを作成する手順は、次のとおりです。

1. 「ファイル」、「新規」の順に選択して新規ギャラリを開きます。

2. 「カテゴリ」ツリーで「一般」を開き、「プロジェクト」を選択します。

3. IGF/ArisIDプロジェクトを選択して「OK」をクリックします。

4. 「プロジェクト名」ページでプロジェクトのプロジェクト名とディレクトリを指定します。

5. オプションで、追加のテクノロジを「選択可能」リストから「選択済」リストに移動します。

6. プロジェクトJava設定ページでプロジェクトのデフォルト・パッケージ、Javaソース・パスおよび出力ディレクトリを指定します。

7. IGF/CARML設定の構成ページで「J2SE」または「J2EE」を指定します。

8. 「終了」をクリックします。

CARMLファイルの作成と編集

属性と対話に関するアプリケーションの要件を宣言します。これらは、Client Attribute Requirements Markup Language (CARML)ファイルを使用して指定されます。CARMLエディタは、CARMLファイルの様々なフィールドを編集できるXMLエディタです。次の図に、CARMLエディタの「データ定義」セクションに表示されたサンプルCARML XMLファイルを示します。

図igfdg_carml_editor.gifの説明

新規CARMLファイルを作成するには、次のようにします。

1. 「ファイル」、「新規」の順に選択して新規ギャラリを開きます。

2. 「カテゴリ」ツリーで、「ビジネス層」ノードを開き、「セキュリティ」を選択します。

3. 「項目」リストで、クライアント属性要件(CARML)をダブルクリックしてダイアログを開きます。

4. CARMLファイルの作成ダイアログで、作成するファイルの名前を指定し、「OK」をクリックします。
用意されているテンプレートを使用できます。関連付けられている説明に、各テンプレート・ファイルの詳細が示されます。

CARMLファイル・エディタの「一般」ページが表示されます。

5. 「一般」ページの2つのフィールド(CARML一意インジケータおよびCARML説明)に値を指定します。

6. 「データ定義」ページでアプリケーションの属性要件を指定します。エンティティを追加し、エンティティのデータ対話を指定します。

7. データ対話ページで、アプリケーション・ベースの対話要件を指定します。データ対話ステップで、対話タイプのフィルタを指定します。

既存のCARMLファイルを編集するには、「プロジェクト」パネルで適切なファイルをダブルクリックし、CARMLファイル用概要エディタで開きます。

ArisID Beanの生成

CARMLファイルの編集が終了したら、アプリケーションで使用するArisID Beanを生成できます。ArisID APIに付属のスキーマ定義に従ってリレーション・ファイルを作成した場合、Beanの生成時に使用できます。

属性と対話の宣言をCARMLファイルに指定したら、対応するBeanクラスを生成してアプリケーションで使用できます。ファイルに複数のエンティティが定義されていて、エンティティ間のリレーションシップを指定する必要がある場合、リレーションシップ・ファイルを使用して指定できます。

Beanを生成するには、次のようにします。

1. 「プロジェクト」ペインで、Beanの生成に使用するCARMLファイルを強調表示します。

2. 右クリックしてアプリケーション・ナビゲータのCARMLファイル用コンテキスト・メニューを表示します。

3. ArisIDBeanの生成を選択します。
図igfdg_generate_beans.gifの説明

4. ArisIDBeanの生成ダイアログでパッケージを指定します。
図igfdg_dialog_genbeans.gifの説明

5. リレーション・ファイルを使用する場合、リレーションの使用を選択してリレーション・ファイルを指定するか、参照します。

6. 「OK」をクリックします。
これで、アプリケーションにこれらのBeanを組み込むことができます。

アプリケーションでのArisID Beanの使用方法

Identity Governance Framework ArisID API JDeveloper拡張では、始めにArisId Beanを作成します。これらのBeanは、他のJava Bean同様、開発者パースぺクティブです。標準のBeanのセマンティクスを使用してJavaアプリケーションから呼び出すことができます。これによって、開発者が使用するフレームワークに応じて様々な使用法が可能になります。

たとえば、ADF(オラクル社のJavaベースのWebアプリケーション・フレームワーク)を作成する場合、Beanをデータ・コントロールに変換してADFページにドラッグできます。これによって、開発者は、(検索、更新またはページでの表示用に)Beanを利用するアプリケーション同士を簡単に接続できます。コードを記述する必要はありません。

別の使用例は、アイデンティティ・データをWebサービスとしてOracle SOA Suiteから公開する開発者です。この場合、Beanには、Oracle Virtual DirectoryやOracle Directory Server Enterprise Editionなどのディレクトリ・サーバーに対するDSML問合せを使用するかわりにJavaコールアウトを使用してアクセスできます。SOAプロセス内で使用されるXML解析が少なくなるため、作成が容易になり、より効率的になります。

特定のプロトコルを意識せずにオブジェクトと属性の記述に注力することで、アイデンティティ情報のアクセスに関する開発者の生産性を向上させることができます。ArisIDにはプライバシとセキュリティが組み込まれているため、これは、セキュアで規格に準拠した方法で行われます。

マッピング・ファイルの編集

Oracle実装では、CARML宣言をOracle Virtual DirectoryなどのLDAPベースのサーバーにマップします。マッピング・エディタで、CARML属性をLDAP属性、オブジェクトクラスおよび検索パラメータにマップできます。サイトのLDAPベースのサーバー用にマッピング・ファイルをカスタマイズできます。LDAPの規定は、Internet Engineering Task ForceによってRFCの2251から2256に定義されています。詳細は、http://www.ietf.orgを参照してください。

マッピング・ファイルを編集するには、次のようにします。

1. 「プロジェクト」ペインでマッピング・ファイルを強調表示します。

2. ダブルクリックして、マッピング・ファイル概要エディタでファイルを開きます。
図igfdg_mapping_file.gifの説明

3. 「マッピング」ページで、変更するエンティティを強調表示します。

4. そのエンティティ用に変更するマッピング定義を強調表示します。

5. 必要に応じて、RDN属性、検索ベースおよび作成ベースを編集します。

6. オブジェクトクラス、フィルタ・オブジェクトクラス、パスワード属性および複数言語クラスを追加するには、対応する「追加」アイコンをクリックします。

7. 変更する他のエンティティについて、ステップ3から6を繰り返します。

8. 必要に応じて、「グローバル」ページでページング設定を変更します。

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

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

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

- 概要

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

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

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

概要

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

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

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

- ユーザー属性は、LDAP inetorgpersonオブジェクト・クラスに属します。

- ロール属性は、LDAP groupofuniquenamesオブジェクト・クラスに属します。

- 検索フィルタには、属性値に対するand条件のみがあります。

- 標準のユーザーロールjarファイルが要件を満たします。

関連項目:

- 『Oracle Fusion Middleware Identity Governance Framework UserRole APIリファレンス』

- 『Oracle Fusion Middleware Identity Governance Framework IDXUserRole APIリファレンス』

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

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

カスタム属性を追加せずに標準のユーザーおよびロール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

- SearchByName

- SearchUsers

- SearchByPage

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

- ロール関連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)を介して使用可能です。

A サンプル・アプリケーション

次のサンプル・アプリケーションでは、IDXユーザー/ロールBeanを使用します。

SearchUsers.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="org.openliberty.arisid.*"%>
<%@page import="org.openliberty.arisidbeans.*"%>
<%@page import="oracle.igf.userrole.*"%>
<%@page import="java.util.*"%>
<%@page import="java.net.URI"%>
<%!public static UserManager uMgr = null;
{
try {
uMgr = new UserManager(null);
} catch (Exception e) {
e.printStackTrace();
}

}
%>
<html>
<head>
<title>Search Users</title>
<%

String firstname = request.getParameter("firstname");
String lastname = request.getParameter("lastname");
String telephone = request.getParameter("telephone");

List<PropertyFilterValue> attrFilters = new ArrayList<PropertyFilterValue>();
attrFilters.add(new PropertyFilterValue("firstname", firstname, AttributeFilter.OP_BGNSWITH));
attrFilters.add(new PropertyFilterValue("lastname", lastname, AttributeFilter.OP_BGNSWITH));
attrFilters.add(new PropertyFilterValue("telephone", telephone, AttributeFilter.OP_CONTAINS));

List<User> subjs = uMgr.searchUsers(attrFilters);

%>
</head>
<body>

<a href="SearchUsers.html">Home</a>
<center>List of Users with FirstName starting with "<%=firstname%>", LastName
starting with "<%=lastname%>" and TelephoneNumber containing
"<%=telephone%>"</center>

<%
Iterator<User> sIter = subjs.iterator();
while (sIter.hasNext()) {
User subj = sIter.next();

Map<String, IAttributeValue> vals = subj.getAllAttributes();
Iterator<IAttributeValue> iter = vals.values().iterator();
%>
<table border="0">
<tr>
<th>Item</th>
<th>Value</th>
</tr>
<%
while (iter.hasNext()) {
IAttributeValue val = iter.next();
String name = val.getNameIdRef();
String value = null;
if (val.size() > 0)
value = val.get(0);
if (value != null)
{
%>
<tr>
<td><%=name%></td>
<td><%=value%></td>
</tr>
<%
}
}
%>
</table>
<%
}
%>
<br>
<br>
<br>
<a href="SearchUsers.html">Home</a>
</body>
</html>

SearchUsers.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD><TITLE>Search Users</TITLE></HEAD>
<BODY>
<FORM METHOD=POST ACTION="SearchUsers.jsp">

First Name Starting with <INPUT TYPE=TEXT NAME=firstname SIZE=30><BR><BR>
Last Name Starting with <INPUT TYPE=TEXT NAME=lastname SIZE=30><BR><BR>
Telephone Number containing <INPUT TYPE=TEXT NAME=telephone SIZE=15><BR><BR>
<P><INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

Copyright © 2011, Oracle and/or its affiliates. All rights reserved.