![]() | |
Sun Java™ System Identity Manager 7.1 配備ツール |
第 4 章
アダプタの開発この章では、企業または顧客用に調整された、独自のカスタム Sun JavaTM System Identity Manager リソースアダプタを作成する方法について説明します。具体的には、この章では次の内容について説明します。
この情報は、次のように構成されています。
独自のカスタムアダプタを作成するための出発点として、製品に付属のサンプルアダプタ (スケルトンアダプタ、と呼ばれる) を使用することをお勧めします。これらの重要なスターターファイルをより深く理解できるよう、この章では、これらのファイルを頻繁に使用してリソースアダプタファイルの特定の特性を例で示します。
概要ここでは、Identity Manager でのアダプタの目的と機能に関連した、基本的な問題の概要について説明します。この節は次のトピックで構成されています。
この章の対象読者
この章では、リソースアダプタの全体的な設計および操作の背景について説明します。
この章では、読者が組み込み型の Identity Manager リソースの作成と使用に精通していること、および『Sun JavaTM System Identity Manager 管理ガイド』の「Resources」の章で説明されているトピックに精通していることを前提にしています。
リソースアダプタについて
Identity Manager の通信または管理の対象となる各リソースは、Identity Manager でリソースオブジェクトを使用して定義する必要があります。Identity Manager には、管理が必要なリソースごとに、リソースオブジェクトが必要です。リソースアダプタクラスには、そのリソースオブジェクトを Identity Manager リポジトリに登録するため、および外部リソースを管理するために必要なメソッドが含まれています。
アダプタの主な目的は、このリソースタイプの基本的な特性を定義することです。この情報は、リソースオブジェクトとして Identity Manager リポジトリに保存されます。
リソースオブジェクトによって、Identity Manager で管理しているリソースの機能と設定が定義されます。これには、表 4-1 に示す情報が含まれます。
カスタマイズされたアダプタによって、これらの基本的な特性を定義するための手段だけでなく、Identity Manager からの要求を、リソースに対して実行する操作に変換するメソッドも提供されます。
リソースアダプタは、Identity Manager と、アプリケーションやデータベースなどの外部リソースの間のプロキシとして機能します。リソースアダプタクラスは、Identity Manager からの情報をリソースにプッシュしたり、オプションでリソースからの情報を Identity Manager にプルしたりするために必要なメソッドを実装します。このオプションのプル機能を Active Sync と呼びます。Active Sync 機能を持つリソースアダプタは、Active Sync 対応と呼ばれます。
Identity Manager は、Active Directory などのいくつかの一般的なリソースには Active Sync 対応アダプタを提供し、Web サーバー、Web アプリケーション、データベース、さらには旧バージョンのアプリケーションやオペレーティングシステムを含む、その他の多くのリソースタイプには、標準リソースアダプタを提供します。Identity Manager で提供されるリソースアダプタは、Identity Manager によってサポートされている、各種のリソースタイプに対して汎用的なインタフェースを提供します。サポートされているこれらのいずれかのリソースタイプのインスタンスが指定されると、そのリソースアダプタは実世界のリソースと通信し、そのリソースを管理することができます。
Identity Manager のオープンアーキテクチャーによって、提供されたリソースアダプタではまだサポートされていない外部リソースを管理できるようにする、カスタムリソースアダプタが可能になります。新しいカスタムリソースアダプタタイプを作成するためのメカニズムについては、この章のあとの方で説明します。
Active Sync 対応アダプタと標準アダプタの相違点
リソースアダプタは、標準アダプタまたは Active Sync 対応アダプタ、あるいはその両方です。Java の用語では、リソースアダプタは ResourceAdapterBase クラスを拡張することによって標準リソースアダプタになり、Active Sync インタフェースを実装することによって Active Sync 対応になります。
Active Sync 対応アダプタは、ソースから情報を取得できます。一般には、イベントによって駆動されるか、または情報を取得するためにリソースにポーリングするかのいずれかです。標準リソースアダプタは、アカウント情報への変更を、Identity Manager によって管理されている外部リソースにプッシュします。
標準リソースアダプタは、Identity Manager からの変更を、自身が管理しているリソースに伝播します。リソースアダプタが実行する、代表的な管理アクティビティーには次のものがあります。
Active Sync 対応アダプタは、データ変更をリソースから直接収集して Identity Manager でのアクティビティーを開始できます。これらのアクティビティーには次のものがあります。
Active Sync 対応アダプタによって監視されるリソースのタイプ
Active Sync 対応アダプタは、次のリソースタイプのサポートに特に適しています。
たとえば、Active Directory サーバー上でユーザーアカウントがネイティブに変更されると、そのトランザクションが監査ログに記録されます。このログを 30 分ごとに確認するように Identity Manager の Active Directory リソースを設定でき、それにより、任意の変更が検出されると Identity Manager でイベントがトリガーされます。
このリソースに、API を通してほかの Active Sync 対応アダプタを登録できます。それにより、項目への変更が発生すると、このアダプタにイベントメッセージが通知されます。これらのメッセージには、変更された項目、更新された情報、および一般にはその変更を行なったユーザーへの参照が含まれます。たとえば、LDAP リソースは、Active Sync 対応アダプタの通知実装を使用しています。
- 更新情報が入力されたデータベース。データベースリソースは、デルタのテーブルを使用して管理することもできます。このテーブルは、いくつかの異なる方法を使用して生成できます。たとえば、データベースのスナップショットを現在の値と比較し、その差分を含む新しいテーブルを作成できます。アダプタは次に、デルタのテーブルの行をプルして処理し、完了したらそれらの行にマークを付けることができます。
- 変更タイムスタンプを含むデータベース。3 番目のタイプの Active Sync 対応アダプタは、特定の時刻のあとに変更されたデータベースエントリがないかどうかを問い合わせ、更新を実行したあと、新しいクエリーをポーリングできます。
最後に正常に処理された行を格納することによって、Identity Manager は「"starts with" (で始まる)」クエリーを実行して、ポーリングの影響を最小限に抑えることができます。最後のものは処理のために返されているため、リソースに対して行われた変更のみを対象とします。標準リソースアダプタが機能する仕組み
ここでは、標準アダプタの処理の基本的な手順の概要について説明します。
Identity Manager から、Identity Manager によって管理されているリソースに情報をプッシュする場合、すべての標準リソースアダプタが次の一般的な手順に従います。
- Identity Manager サーバーがリソースマネージャを初期化します。
すべての使用可能なリソースタイプが、リソースアダプタインタフェースを通して登録されます。登録プロセスの一部として、リソースアダプタは XML 定義のプロトタイプを提供します。
- ユーザーが新しいリソースを作成するためのプロセスを開始します。
Identity Manager 管理者が新しいリソースを作成する場合は、リソースタイプのプロトタイプ定義を表示するフォームを作成しているタスクに、リソース属性フィールドのクエリーが行われます。Identity Manager は、これらの属性を使用してブラウザ上にフォームを表示します。新しいリソースを作成しているユーザーは、この情報を入力して「保存」をクリックします。
- Identity Manager は、入力された情報をほかのリソースフィールドとともに、新しいリソースオブジェクトの名前でリソースオブジェクトリポジトリに保存します。
リソース作成中にユーザーが「保存」をクリックすると、作成タスクは入力されたデータを収集して必要な検証をすべて実行し、XML を通してデータを直列化したあと、その直列化されたオブジェクトをオブジェクトリポジトリに書き込みます。
- Identity Manager は、Identity Manager ユーザーが作成されるか、または変更されると、使用可能なリソースのリストを複数選択ボックスに表示します。
リソースを選択すると、Identity Manager はそのリソースオブジェクトに、使用可能なアカウント属性フィールドを問い合わせます。Identity Manager は、これらのフィールドの説明を使用して、ユーザーが適切なデータを入力できる属性フィールドが含まれたフォームを表示します。
- このフォームが保存されると、リソースオブジェクトに接続情報の問い合わせが行われ、そのリソースを使用した接続が確立されます。
- アダプタは、この接続を通して、そのリソース上のアカウントに対して目的の操作を実行するためのコマンドを送信します。
- これが作成要求である場合は、Identity Manager ユーザーオブジェクトが、そのリソースアカウント情報を使用して更新されます。
ユーザーアカウント情報が表示されると、Identity Manager はそのユーザーがアカウントを保持しているリソースのリストを、保存されたアカウントオブジェクトに要求します。リソースごとに、Identity Manager はリソースオブジェクトに問い合わせを行い、その接続情報を使用してリソースへの接続を確立します。
アダプタは、この接続を通してユーザーのアカウント情報を取得するためのコマンドを送信し、取得された情報を使用して、そのリソースオブジェクト内で定義されている属性フィールドに入力します。システムによって、これらの値を表示するためのフォームが作成されます。
Active Sync 対応アダプタが機能する仕組み
この項では、次の内容を説明します。
基本的な Active Sync 対応アダプタの処理
すべての Active Sync 対応アダプタは、Identity Manager で管理されているリソースの変更を知るために、次の基本的な手順でリスニングまたはポーリングを実行します。変更されたリソースを検出すると、Active Sync 対応アダプタは次の手順を実行します。
- リソースから変更された情報を抽出します。
- どの Identity Manager オブジェクトに関係があるか判断します。
- IAPIFactory.getIAPI メソッドに渡すユーザー属性のマップを、アダプタの参照および任意の追加オプションのマップとともに生成します。これにより、Identity Application Programming Interface (IAPI) オブジェクトが作成されます。
- IAPI イベントに関するロガーをアダプタの Active Sync ロガーに設定します。
- IAPI オブジェクトを Active Sync マネージャーに送信します。
- Active Sync マネージャーは、このオブジェクトを処理し、処理が成功したかどうかを Active Sync 対応アダプタに通知する WavesetResult オブジェクトをアダプタに返します。このオブジェクトには、ID の更新のために Identity Manager システムが使用するさまざまな手順の結果を多く含めることができます。一般に、ワークフローは Identity Manager 内のエラーにも対応し、多くの場合、担当管理者の承認にあとを任せます。
例外は、ActiveSyncUtil.logResourceException メソッドを使用して、Active Sync および Identity Manager トレースログに記録されます。
Identity Manager ユーザーの特定
Active Sync 対応アダプタは、リソース上でのアカウントの変更を検出すると、受け取った属性を Identity Manager ユーザーにマップします。または、一致するアカウントがない場合は Identity Manager ユーザーアカウントを作成します。
変更が検出されたときの動作は、次のパラメータによって決定されます。
処理規則の存在によって、IAPIProcess を使用するか、または IAPIUser を試みるかどうかが決定されます。ほかのパラメータ設定が指定されたイベントに対する Identity Manager ユーザーが相関規則または確認規則で一意に特定されなかったために Identity Manager が IAPIUser を使用できない場合、プロセス解決規則が設定されていれば、その規則を使用して IAPIProcess イベントが作成されます。そうでない場合は、エラー条件が報告されます。
IAPIUser はビューをチェックアウトし、このビューをユーザーフォームに対して使用可能にします。作成と更新の場合は、ユーザービューがチェックアウトされます。削除の場合は、プロビジョン解除ビューがチェックアウトされます。ただし、IAPIProcess ではビューは使用できません。処理規則が設定されているか、またはプロセス解決規則が呼び出されるかのどちらかです。
カスタムアダプタを作成するための準備次の節では、カスタムアダプタの開発を開始するためのアプローチについて説明します。
リソースの把握
この節では、次の項目を含め、アダプタファイルを編集する準備ができるようにします。
リソースを把握する作業の開始
次の質問を使用して、情報の収集や前提条件の定義に役立てください。
デフォルトの Identity Manager リソースアダプタのどのタイプが、計画しているアダプタにもっともよく似ていますか。
Identity Manager の標準構成に付属のアダプタファイルの簡単な説明については、表 4-4 を参照してください。接続先のリソースタイプにもっともよく一致する Identity Manager アダプタファイルを選択してください。
そのリソース上のユーザーアカウントはどのような特性を持っていますか。そのリソースに関する基本的なタスクをどのように実行しますか。
リモートリソースに関する次のタスクの実行方法を見つけてください。
また、サポートされているすべての属性を把握するとともに、操作を実行するために必要な最小限の属性を特定することも必要です。
そのリソースへの接続をサポートしている適切なツールがありますか。
多くのリソースには、外部のアプリケーションをリソースに統合する場合に使用できる API のセットまたは完全なツールキットが付属しています。公開された API のセットがリソースに付属しているかどうか、または Identity Manager との統合を高速化するためのマニュアルやツールがツールキットに用意されているかどうかを調べてください。たとえば、データベースの場合は、JDBC を介してそのデータベースに接続する必要があります。
ログインして、そのリソース上のユーザーを検索できるのはだれですか。それはどのように行われますか。
ほとんどのリソースアダプタには、ユーザーの検索や各ユーザーの属性の取得などのタスクを実行するのに使用できる管理アカウントが必要です。これは一般には、特権レベルの高い (またはスーパーユーザー) アカウントですが、読み取り専用アクセスを許可され、委任された管理アカウントである場合もあります。
そのリソースは属性を追加するためのカスタマイズが可能ですか。
ほとんどのリソースは、組み込み型の属性を拡張できます。たとえば、Active Directory と LDAP では、いずれもカスタム属性を作成できます。
Identity Manager でこのリソースが維持する属性の種類、それらの属性のこのリソース上での名前、および Identity Manager で付ける名前を検討してください。これらの属性名はスキーママップに追加され、そのタイプのリソースを作成するときに使用されるフォームへの入力になります。
ソース上のどの属性/操作でイベントが作成されますか (Active Sync 対応)。
LDAP などのように、そのリソースで変更が発生した場合の通知メッセージへの登録がサポートされている場合は、どの属性変更で通知をトリガーするか、およびメッセージ内にどの属性を含めるかを特定してください。
ソース上のイベントが検出された場合、Identity Manager はどの操作を実行しますか (Active Sync 対応)。
これらの操作には次のものがあります。
Active Sync 対応アダプタを外部リソース内のイベントによって駆動されるようにしますか。あるいは、ポーリング間隔で設定されるようにしますか。
決定を行う前に、通常の Identity Manager インストール内でポーリングが機能する仕組みを考慮してください。外部イベントを実装しているか、または外部イベントによって駆動されるインストールもありますが、Identity Manager が配備されているほとんどの環境は、ハイブリッドな方法を使用しています。
次のいずれかのアプローチを選択できます。
- ポーリング間隔の設定。ポーリングインタフェースは、設定可能な間隔または指定したスケジュールで ActiveSyncManager スレッドから呼び出すことができます。作業が受信された場合のポーリングの高速化、アダプタごとのスレッドまたは共通のスレッド、並行操作の量に対する制限などの設定を含む、ポーリングパラメータを設定できます。
- イベント駆動の環境の設定。アダプタを純粋にイベント駆動にすることもできます。このモデルの場合、アダプタはリスニング接続 (LDAP リスナーなど) を設定し、遠隔システムからのメッセージを待機します。この場合は、poll メソッドを何もしないように実装し、ポーリング間隔を任意の値 (たとえば、週に 1 回) に設定することができます。更新がイベント駆動である場合は、保証された配信メカニズム (MQ Series など) を用意する必要があります。そうしないと、同期が失われます。
- ハイブリッドソリューションの実装。このシナリオの場合、外部イベントはスマートポーリングをトリガーすることができ、通常のポーリングルーチンを消失したメッセージから回復できます (スマートポーリングは、変更が頻繁に発生しないかぎり、ポーリングレートを変更レートに適応させてポーリングの頻度を下げる。それにより、頻繁なポーリングによるパフォーマンスへの影響と、頻度の低いポーリングによる更新の遅延のバランスを取る)。
追加の準備
前の質問を使用してリソースのプロファイルを確認したら、次の手順を実行することによって準備作業を続けます。
- 記述する必要のあるメソッドのリストを特定します。
アダプタファイルの作成でもっとも時間がかかる部分は、Identity Manager からリソースに情報をプッシュしたり、リソースから Identity Manager へのフィードを作成したりするための独自のメソッドの記述です。
Java ファイルに含めるメソッドは、ある程度、どのようなタイプのリソースへの接続を作成しているかに依存します。
- Identity Manager の JavaDoc を確認します。
関連する JavaDoc は製品 CD に収録されており、そのまま使用できるか、または拡張が必要な基底クラスとメソッドを特定しています。
Resource Extension Facility (REF) キットの内容
Sun Resource Extension Facility キット (製品 CD またはインストールイメージの /REF ディレクトリで提供される) は、カスタムリソースを作成するためのガイドになります。この REF キットは、カスタムリソースや Active Sync 対応アダプタを作成するために必要なコード例とツールを提供します。
表 4-3 は、REF キットで提供されるファイルとディレクトリのカテゴリを示しています。
リソースアダプタのサンプル
REF キットは、独自のカスタムアダプタの作成プロセスをすばやく開始するために使用できる、サンプルのアダプタファイルとツールを提供します。これらのリソースソースファイルでは、一般に開発されている各種タイプのリソースの例が提供されています。REF キットはまた、アダプタ開発の基礎として使用されることを目的とした、スケルトンファイルのセットも提供しています。
表 4-4 は、REF キットで提供されるサンプルファイルを示しています。
注
テーブルベースのリソースの場合は、カスタムアダプタを記述する代わりに、リソースアダプタウィザードを使用してアダプタを作成します。
このウィザードを使用して、Sun から出荷されたアダプタをカスタマイズする方法の詳細については、『Identity Manager 管理ガイド』の「設定」の章を参照してください。
改訂のためのコードの特定
REF キットで出荷されたスケルトンファイルのどちらにも、アダプタに固有の変更が必要なコード内の場所を特定する、@todo と change-value-here のテキスト文字列が含まれています。これらのファイルをカスタマイズする場合は、これらの文字列を検索して、変更の必要な場所を特定してください。
表 4-5 は、カスタマイズが必要なコードを特定する場合に、検索できるテキストを示しています。
表 4-5 テキスト文字列の検索
コメント
説明
@todo
サポートしようとしている特定のシナリオを処理するために、書き換えが必要なメソッドを特定します。
change-value-here
実行が必要な置換を特定します。
ビルド環境の設定
ビルド環境を、次の手順で設定します。
前提条件: Identity Manager のバージョンに必要な JDK バージョンをインストールする必要があります。
JDK をインストールしたあと、システムに REF ディレクトリ全体をコピーすることによって REF キットをインストールします。
- 新しいディレクトリに移動し、ws.bat (Microsoft Windows オペレーティングシステムを実行しているシステムで作業している場合) または ws.sh (UNIX システムで作業している場合) という名前のファイルを作成します。
- このファイルに次の行を追加したあと、保存して終了します。
:ここで、WSHOME は REF キットがインストールされているパスであり、JAVA_HOME は Java がインストールされているパスを識別します。
はじめに
次の手順を使用して、カスタムアダプタの作成を開始します。
リソースアダプタの把握ここでは、ほとんどのアダプタに共通する、リソースアダプタのソースコードコンポーネントの概要について説明したあと、Resource Extension Facility の一部であるスケルトンアダプタの例を示します。
アダプタコンポーネント
表 4-6 は、主なリソースアダプタコンポーネントを示しています。
表 4-6 アダプタコンポーネント
ファイルコンポーネント
説明
標準の Java ヘッダー情報
作成している新しいアダプタクラスファイルの親クラスの識別情報、コンストラクタ、およびインポートされたファイルが含まれています。
prototypeXML 文字列
Identity Manager インタフェースに、リソースに関するどの情報が表示されるかを定義します。各リソース属性を Identity Manager ユーザー属性にマップします。
リソースから Identity Manager へのフィードを作成するメソッド
Active Sync 対応アダプタでは、リソースを検索して変更がないかどうかを調べたり、更新を受信したりするメソッドを提供します。これらのメソッドを記述するには、そのリソースとの通信方法だけでなく、そのリソース上の変更を登録または検索する方法も理解していることが必要です。
Identity Manager リポジトリ内の更新操作を実行するメソッド
Active Sync 対応アダプタでは、リソースから Identity Manager へのフィードを実行します。
Identity Manager から外部リソースに情報を書き込むメソッド
これらのカスタマイズされたメソッドは、そのリソースをよく知っている開発者が記述する必要があります。
注
スケルトンアダプタファイルに対する 1 つの拡張が、@todo と @change-attribute-here のコメントの追加です。これらのコメントは、アダプタ固有のテキストの、置換するべき場所にマークを付けています。
リソースアダプタで定義されるリソース情報
Identity Manager 内のリソースを定義する情報には、次の 3 種類があり、これらの情報はアダプタファイル内でリソースタイプに対して定義されます。
- リソース属性。アダプタ Java ファイルの prototypeXML セクションで定義されます。これらの値は、このリソースタイプの特定のインスタンスを作成するときに Identity Manager インタフェースから修正できます。
- アカウントの DN またはアイデンティティーテンプレート。ユーザーに対するアカウント名の構文が含まれています。アカウント名の構文は、階層構造の名前空間で特に重要です。
- Identity Manager アカウント属性。リソースのスキーママップで定義されます。Identity Manager アカウント属性によって、リソースオブジェクトの Identity Manager 属性が定義されます。
標準の Java ヘッダー情報
ヘッダー情報は、標準の Java ファイル (public クラス宣言とクラスコンストラクタを含む) を表しています。コンストラクタと public クラスをリストしているファイルのセクション、および必要に応じてインポートされたファイルを編集する必要があります。
prototypeXML セクション
アダプタ Java ファイル (prototypeXML) のこのセクションは、リソースの XML 定義です。このセクションには、Identity Manager インタフェースに表示される、リソースのリソース名とすべての属性が含まれている必要があります。
表 4-7 は、prototypeXML のコンポーネントを説明しています。一部のコンポーネントは、Active Sync 対応アダプタよりも、リソースアダプタとの関連性が高くなっています。Active Sync 対応アダプタに関連する各コンポーネントは、この表のあとの節でより詳細に説明されています。
表 4-7 prototypeXML のコンポーネント
コンポーネント
説明
リソース
リソースのトップレベルの特性を定義します。この要素のキーワードには、次のものがあります。
リソース属性
リソースを設定するために Identity Manager によって使用されます。リソース属性は、<ResourceAttribute> 要素を使用して定義される XML 要素です。この要素のキーワードには、次のものがあります。
アカウント属性
基本的なユーザー属性に対するデフォルトスキーママップを定義します。アカウント属性は、<AccountAttribute> 要素を使用して定義されます。カスタム属性にマップする場合とは異なり、標準の Identity Manager アカウント属性タイプにマップするアカウント属性を定義します。
アカウント属性のリソース属性へのマッピングの詳細については、「リソース属性を Identity Manager アカウント属性にマップする方法」を参照してください。
アイデンティティーテンプレート
<Template> タグで定義されるこのテンプレートは、ユーザーのアカウント名の作成方法を定義します。アカウント名には一般に、2 つの形式があります。1 つの形式は accountId であり、一般には、NT や Oracle などのフラットな名前空間を持つリソースに使用されます。
もう一つは、cn=accountId,ou=sub-org,ou=org,o=company という形式をした、ユーザーの完全な識別名です。この後者の形式は、ディレクトリなどの階層構造の名前空間に使用されます。
ログイン設定
(標準リソースアダプタのみ) <LoginConfigEntry> 要素で定義されるこの値は、このリソースのパススルー認証サポートのための値を定義します。パススルー認証の詳細については、『Sun JavaTM System Identity Manager リソースリファレンス』を参照してください。
フォーム
(Active Sync 対応アダプタのみ) Active Sync 対応アダプタからのデータが Identity Manager に統合される前に、そのデータを処理するフォームオブジェクトを指定します。フォームはオプションですが、ほとんどの場合は、将来の柔軟な変更を可能にします。フォームを使用すると、受信したデータを変換したり、そのデータをほかのリソースアカウント上のほかのユーザー属性にマップしたり、Identity Manager でほかの操作を発生させたりすることができます。
リソースユーザーフォーム
(Active Sync 対応アダプタのみ) <ResourceUserForm> 要素で定義されます。
リソースメソッド
リソースメソッドは、タスクごとに分類できます。独自のカスタムアダプタを開発する場合は、最初に、開発の目標を満たすにはどのカテゴリが必要かを判断します。たとえば、アダプタを Active Sync 対応アダプタにしますか。また、配備の最初の段階では、パスワードリセットのみをサポートしますか。これらの質問への答えによって、どのメソッドを完成する必要があるかが決定されます。各機能カテゴリに関する追加の情報については、この章のあとの方で説明します。
これらのリソースメソッドのカテゴリを、表 4-8 に示します。
表 4-8 リソースメソッドのカテゴリ
カテゴリ
説明
基本
リソースに接続し、単純な操作を実行するための基本的なメソッドを提供します。
一括操作
リソースからすべてのユーザーを取得するための一括操作を提供します。
Active Sync
アダプタをスケジュールするためのメソッドを提供します。
オブジェクト管理
リソース上のグループと組織を管理するためのメソッドを提供します。
prototypeXML セクションの定義
リソースのソースコード内で、prototypeXML は、Identity Manager リポジトリに格納されるリソースオブジェクトを定義します。
表 4-9 は、Identity Manager 内のリソースを定義するための 5 種類の情報を示しています。最初の 3 つの種類は、管理者がそのリソースを定義しているときに表示されます。残りの 2 つの種類はリソースの定義に役立ちますが、Identity Manager 管理者が簡単には変更できません。
表 4-9 Identity Manager リソースを定義するための情報の種類
情報の種類
説明
リソース属性
管理対象のリソース上の接続情報を定義します。リソース属性には一般に、リソースのホスト名、リソースの管理者名とパスワード、およびディレクトリベースのリソースのコンテナ情報が含まれます。また、リソース承認者のリストや、リソース上の操作を再試行する回数などの Identity Manager 属性もリソース属性と見なされます。
アカウント属性
Identity Manager 属性名とリソース属性名の間の関係をマップします。これらの属性はリソーススキーママップ上で定義され、prototypeXML に表示されます。たとえば、LDAP 上のリソース属性 sn は、lastname という Identity Manager 内の、より一般的な属性にマップされます。
アイデンティティーテンプレート
アカウントの DNユーザーのためのデフォルトのアカウント名を定義します。
ログイン設定
このリソースをパススルー認証に使用する場合に、使用されるパラメータを定義します。一般に、これらのパラメータは username と password です。ただし、SecurId の例には、ユーザー名とパスコードが含まれています。
オブジェクト管理
リソース属性。
リソース属性は、次のものを定義します。
Identity Manager 管理者インタフェースを使用している管理者から見ると、これらの属性は、Identity Manager インタフェースに表示され、ユーザーに値を入力するよう求めるフィールド名を定義します。
Windows NT リソースの場合は、属性にソース名、ホスト名、ポート番号、ユーザー、パスワード、およびドメインを含めることができます。たとえば、リソースタイプの「リソースの作成」/「リソースの編集」ページには、リソースを作成している管理者がそのリソースが存在するホストを特定するためのホストフィールドが必要です。このフィールド (フィールドの内容ではない) は、このアダプタファイルで定義されます。
リソース属性は、次に示すように、<ResourceAttribute> 要素を使用して Java ファイルで定義されます。
<ResourceAttribute name='"+RA_HOST+"' type='string' multi='false'¥n"+ description='<b>host</b><br>Enter the resource host name.'>¥n"+
description フィールドは、RA_HOST フィールドに対する項目レベルのヘルプを特定します。< の文字を含めることはできません。前の例では、< の文字が < と ' に置き換えられています。
表 4-10 は、<ResourceAttribute> 要素で使用できるキーワードを示しています。
表 4-10 <ResourceAttribute> 要素のキーワード
キーワード
説明
name
属性の名前を特定します。必須属性のリストについては、「必須リソース属性」を参照してください。
type
使用されるデータ型を特定します。現在は、string 型だけがサポートされています。
multi
属性として複数の値を受け付けることができるかどうかを指定します。true の場合は、複数行ボックスが表示されます。
description
RA_HOST フィールドに対する項目レベルのヘルプを特定します。Identity Manager は、説明されている項目 (この場合は host) を含むヘルプをボールドテキストで表示します。これを行うために必要な HTML の山括弧 (< および >) が XML の解析と干渉するため、これらの文字は < と > に置き換えられます。バイナリが変換されると、description の値は次のように表示されます。
Description=lt;b>host</b> Enter the resource host name.
facets
このリソース属性の使用法を指定します。有効な値は次のとおりです。
リソース属性の上書き リソースアダプタやアダプタのパラメータを操作する場合は、次の 2 つの方法のいずれかを選択できます。
コード例 4-1 の場合、ユーザーフォームは、各ユーザーの作成中に template のリソース属性値を上書きする必要があります。本稼働環境で同様のコードを実装する場合はおそらく、この template 値を計算するための、より詳細なロジックをユーザーフォームに含めることになります。
コード例 4-1 template のリソース属性値の上書き
<Field name='template'>
<Display class='Text'>
<Property name='title' value='NDS User Template'/>
</Display
</Field>
<!-- NDS リソースの名前に合わせて NDS を変更する -->
<!-- 単語 Template は、リソース xml に示されるとおり、属性フィールドの名前である。>
<Field name='accounts[NDS].resourceAttributes.Template'>
<Expansion>
<ref>template</ref>
</Expansion>
</Field>
必須リソース属性 表 4-11 は、スケルトンアダプタファイルで提供されるリソース属性を示しています。
表 4-11 スケルトンアダプタファイル内のリソース属性
必須リソース属性
説明
RA_HOST
リソースのホスト名。これは、「リソースパラメータ」ページの「ホスト」フィールドに対応しています。
RA_PORT
リソースとの通信に使用されるポート番号。これは、「リソースパラメータ」ページの「ポート」フィールドに対応しています。
RA_USER
リソースに接続するための権限を持つ、ユーザーアカウントの名前。フィールド名は、「リソースパラメータ」ページによって異なります。
RA_PASSWORD
RA_USER で指定されたアカウントのパスワード。これは、「リソースパラメータ」ページの「ホスト」フィールドに対応しています。
表 4-12 は、ActiveSync クラスの ACTIVE_SYNC_STD_RES_ATTRS_XML 文字列で定義されている Active Sync 固有の属性を示しています。
表 4-12 ACTIVE_SYNC_STD_RES_ATTRS_XML で定義されている Active Sync 固有の属性
必須リソース属性
説明
RA_PROXY_ADMINISTRATOR
承認とログ記録のための Identity Manager 管理者。これは、Identity Manager 画面内の「プロキシ管理者」フィールドに対応しています。この値は、アダプタ Java ファイル内では定義しません。代わりに、このリソースタイプの特定のインスタンスを定義するときに、管理者がこの情報を入力します。
RA_FORM
受信した属性を処理し、それをビュー属性にマップするフォーム。これは、「入力フォーム」フィールドに対応しています。
RA_MAX_ARCHIVES
保持するログファイルの数を指定します。
RA_MAX_AGE_LENGTH
ログファイルがアーカイブされるまでの最大時間を指定します。期間が 0 (ゼロ) の場合、期間ベースのアーカイブは行われません。RA_MAX_ARCHIVES の値が 0 (ゼロ) の場合、この期間が経過してもアーカイブは行われず、アクティブログは切り捨てられ、再利用されます。
RA_MAX_AGE_UNIT
seconds、minutes、hours、days、weeks、months のいずれかです。この値は、RA_MAX_AGE_LENGTH とともに使用されます。
RA_LOG_LEVEL
ログレベル (0: 無効、4: 非常に詳細)。これは、Identity Manager 画面内の「ログレベル」フィールドに対応しています。
RA_LOG_PATH
ログファイルの絶対または相対パス。これは、Identity Manager 画面内の「ログファイルパス」フィールドに対応しています。
RA_LOG_SIZE
ログファイルの最大サイズ。これは、Identity Manager 画面内の「ログファイルの最大サイズ」フィールドに対応しています。
RA_SCHEDULE_INTERVAL
サポートされているスケジューリング間隔 (秒、分、時間、日、週、月) のポップアップメニュー。
RA_SCHEDULE_INTERVAL_COUNT
スケジュールされた期間の間隔の数 (たとえば、10 分は 10 の間隔数と分の間隔で構成される)。Active Sync 対応アダプタには必要ありません。
RA_SCHEDULE_START_TIME
実行する 1 日の中の時刻。この値を 13:00 に設定し、間隔を週に設定すると、アダプタは週に 1 回午後 1 時に実行されるように設定されます。Active Sync 対応アダプタには必要ありません。
RA_SCHEDULE_START_DATE
スケジューリングを開始する日付。日付を 20020601 に、間隔を月に、時刻を 13:00 に設定すると、アダプタは 6 月 1 日に実行を開始し、月に 1 回午後 1 時に実行されます。
表 4-13 は、デフォルトクラス内の ACTIVE_SYNC_EVENT_RES_ATTRS_XML 文字列で定義されている Active Sync 固有の属性を示しています。これらの各属性の詳細については、「Identity Manager ユーザーの特定」を参照してください。
表 4-13 ACTIVE_SYNC_EVENT_RES_ATTRS_XML で定義されている Active Sync 固有の属性
必須リソース属性
説明
RA_PROCESS_RULE
TaskDefinition の名前、またはフィード内のすべてのレコードに対して実行される TaskDefinition の名前を返す規則です。このパラメータは、ほかのすべてのパラメータより優先されます。
RA_CORRELATION_RULE
アカウントの名前空間内のリソースアカウント属性に基づいて、一致する可能性のあるユーザーまたはアカウント ID の文字列のリストを返す規則。
RA_CONFIRMATION_RULE
ユーザーが一致するかどうかを確認する規則。
RA_DELETE_RULE
リソース上で検出された削除が、IAPI 削除イベントまたは IAPI 更新イベントのどちらとして処理されるかを判定する規則。
RA_CREATE_UNMATCHED
true に設定されている場合は、一致しないアカウントを作成します。false に設定すると、処理規則が設定され、その規則が識別するワークフローによって作成が保証されていることが確認されないかぎり、アカウントを作成しません。デフォルトは true です。
RA_RESOLVE_PROCESS_RULE
相関規則の結果に対する確認規則を使用して、複数の一致が存在するときに実行するワークフローを判定する規則。
RA_POPULATE_GLOBAL
activeSync 名前空間に加えてグローバル名前空間にも値を入力するかどうかを示します。デフォルトは false です。
アカウント属性
標準の Identity Manager アカウント属性 (AttributeDefinition オブジェクトで定義される) には、次の属性が含まれています。
Identity Manager アカウント属性によって、リソースオブジェクトの Identity Manager 属性が定義されます。アダプタファイルの prototypeXML セクションは、受信したリソース属性を Identity Manager 内のアカウント属性にマップします。これらのアカウント属性は、「スキーマの編集」ページにアクセスしたときに表示されます。「スキーマの編集」ページにアクセスするには、「リソースの作成」/「リソースの編集」ページの最下部にある「スキーマの編集」をクリックします。
リソーススキーママップで指定された属性マッピングによって、ユーザーの作成時にどのアカウント属性を要求できるかが決定されます。ユーザー用に選択されたロールに基づいて、入力を求められる一連のアカウント属性は、選択されたロール内のすべてのリソースの属性の和集合になります。Active Sync 対応アダプタの場合は、これらの属性を使用して Identity Manager ユーザーアカウントを更新できます。Active Sync 対応アダプタはこれらの属性を収集し、入力フォーム用のグローバル領域内に格納します。
管理者は、リソースのインスタンスを作成したあと、スキーママップを使用して次の操作を行うことができます。
スキーママップはオプションです。管理者が、Active Sync 対応アダプタへの入力を編集できるようにするためのユーティリティーとして提供され、この入力は多くの場合、データベースの列名やディレクトリの属性名などになります。スキーママップとフォームを使用すると、リソースタイプを処理する Java コードを実装して、マップやフォーム内にリソース設定の詳細を定義できます。
リソースの作成またはリソーススキーママップの編集については、『Sun JavaTM System Identity Manager 管理ガイド』を参照してください。
スキーママップと Active Sync 対応アダプタ
Identity Manager は、Active Sync リソースのスキーママップを、標準的なスキーママップの場合と同じ方法で使用します。つまり、リソースやそのローカル名からどの属性を取得するかを指定します。スキーママップにリストされているすべての属性名 (つまり、そのリソース上に存在するすべての属性) が、Active Sync フォームと、activeSync.name 属性を持つユーザーフォームに使用可能になります。Active Sync リソースがフォームを使用していない場合は、すべての属性がすべてのリソース上の同じ名前を持つ属性に自動的に伝播されることを保証するために、すべての属性がグローバルと見なされます。グローバル名前空間ではなく、フォームを使用してください。
ヒント
グローバル名前空間内に accountId 属性を含めないでください。これは waveset.account.global を特定するために使用される、特殊な属性です。また、リソースアカウントがはじめて作成された場合は、accountId 属性が直接そのリソースの accountId にもなり、アイデンティティーテンプレートがバイパスされます。
たとえば、新しい Identity Manager ユーザーが Active Sync 対応アダプタを通して作成され、そのユーザーに LDAP アカウントが割り当てられている場合、LDAP の accountID は、DN テンプレートの正しい DN ではなく global.accountId に一致します。
リソース属性を Identity Manager アカウント属性にマップする方法
アカウント属性は、標準の Identity Manager アカウント属性またはカスタム属性 (拡張スキーマ属性と呼ばれる) のどちらかにマップできます。
コード例 4-2 では、受信されたリソース属性が、標準の Identity Manager アカウント属性にマップされています。<AccountAttributesTypes> 要素は、リソース属性を Identity Manager アカウント属性にマップする prototypeXML の部分を囲みます。各アカウント属性は、<AccountAttributeType> 要素を使用して定義されます。
コード例 4-2 <AccountAttributesType> を使用したアカウント属性の定義
"<AccountAttributeTypes>¥n"+
<AccountAttributeType name='accountId' mapName='change-value-here' mapType='string' required='true'>¥n"+
"<AttributeDefinitionRef>¥nt"+
<ObjectRef type='AttributeDefinition' name='accountId'/>¥n"+
" </AttributeDefinitionRef>¥n"+
"</AccountAttributeType>¥n"+
"</AccountAttributeTypes>¥n"+
リソース属性のアカウント属性へのマッピングの詳細については、「アダプタのオプションと属性の設定」を参照してください。
prototypeXML での標準リソースアダプタ固有の問題
リソースアダプタ内のアカウント属性のみに固有の問題として、次のものがあります。
ユーザーアイデンティティーテンプレート
ユーザーアイデンティティーテンプレートは、リソース上でのアカウントの作成時に使用されるアカウント名を確立します。Identity Manager ユーザーアカウントに関する情報を、外部リソース上のアカウント情報に変換するために使用されます。
アカウント名は現在、次の 2 つの形式のどちらかです。
アイデンティティーテンプレートでは、任意のスキーママップ属性 (スキーママップの左側にリストされている属性) を使用できます。
ユーザーアイデンティティーテンプレートは、ユーザーフォームから上書きできます。この操作は、組織名を置換するために一般に実行されます。
Identity Manager 内のユーザー名について
ユーザーは、自分の各アカウントに対する ID を持っています。この ID は、一部またはすべてのアカウントで、同一にすることができます。システムは、アカウントの ID を、そのアカウントがプロビジョニングされるときに設定します。Identity Manager ユーザーオブジェクトは、ユーザーの ID と、それらの ID が対応するリソースの間のマッピングを維持します。ユーザーは、表 4-14 に示すように、キーとして使用される Identity Manager 内の主要な accountId だけでなく、accountId:<resource name> の形式で表される、そのユーザーがアカウントを持つ各リソースに対する別の accountId も持っています。
表 4-14 アカウント ID
属性
例
accountId
maurelius
accountId:NT_Res1
marcus_aurelius
accountId:LDAP_Res1
uid=maurelius,ou=marketing,ou=employees,o=abc_company
accountId:AIX_Res1
maurelius
フラットな名前空間
accountId 属性は一般に、次のようなフラットな名前空間を持つシステムに使用されます。
フラットな名前空間を持つリソースの場合、アイデンティティーテンプレートは、Identity Manager アカウント名を使用すべきであることを、単純に指定できます。
階層構造の名前空間
識別名には、アカウント名、組織単位、および組織を含めることができます。識別名は、階層構造の名前空間を持つシステムに使用されます。
階層構造の名前空間を持つリソースの場合は、フラットな名前空間の場合よりもテンプレートを複雑にすることができます。これにより、完全な階層構造の名前を作成できるようになります。
表 4-15 には、階層構造の名前空間と識別名の表現方法の例が含まれています。
表 4-15 階層構造の名前空間の例
システム
識別名の文字列
LDAP
cn=$accountId,ou=austin,ou=central,ou=sales,o=comp
Novell NDS
cn=$accountId.ou=accounting.o=comp
Microsoft Windows 2000
CN=$fullname,CN=Users,DC=mydomain,DC=com
次に示すのは、LDAP などの、階層構造の名前空間を持つリソースに対するアイデンティティーテンプレートの例です。
uid=$accountID,ou=$department,ou=People,cn=waveset,cn=com
各表記の意味は次のとおりです。
複数のユーザー属性からのアイデンティティーテンプレートの作成 アイデンティティーテンプレートはまた、複数のユーザー属性の一部からも作成できます。たとえば、テンプレートを、名の先頭文字と姓の 7 文字の組み合わせで構成することができます。このシナリオの場合は、目的のロジックを実行して、そのリソース上で定義されているアイデンティティーテンプレートを上書きするようにユーザーフォームをカスタマイズできます。
ログイン設定とパススルー認証 <LoginConfigEntry> 要素は、ログインモジュールの名前とタイプだけでなく、このリソースタイプが正常なユーザー認証を完了するために必要な一連の認証プロパティーも指定します。
アダプタファイルの <LoginConfig> および <SupportedApplications> セクションは、このリソースを「ログインモジュール」設定ページのオプションリストに含めるかどうかを指定します。このリソースをオプションリストに表示する場合は、ファイルのこのセクションを変更しないでください。
各 <AuthnProperty> 要素には、次の属性が含まれています。
表 4-16 <AuthnProperty> 要素の属性
属性
説明
name
内部の認証プロパティー名を特定します。
displayName
このプロパティーが HTML 項目としてログインフォームに追加されるときに使用する値を指定します。
formFieldType
text または password のどちらかにできるデータ型を指定します。この型を使用して、このプロパティーに関連付けられた HTML フィールドへのデータ入力を表示 (text) または非表示 (password) のどちらにするかを制御します。
isId
このプロパティー値を Identity Manager の accountID にマップすべきかどうかを指定します。たとえば、プロパティー値が X509 証明書である場合は、このプロパティーをマップすべきではありません。
dataSource
このプロパティーの値のソースを指定します。デフォルト値は user です。
doNotMap
LoginConfigEntry にマップするかどうかを指定します。
ほとんどのリソースログインモジュールは、Identity Manager 管理者インタフェースと Identity Manager ユーザーインタフェースの両方をサポートしています。
コード例 4-3 は、SkeletonResourceAdapter.java で <LoginConfigEntry> 要素を実装する方法を示しています。
コード例 4-3 SkeletonResourceAdapter.java での <LoginConfigEntry> の実装
<LoginConfigEntry name='"+Constants.WS_RESOURCE_LOGIN_MODULE+"' type='"+RESOURCE_NAME+"' displayName='"+RESOURCE_LOGIN_MODULE+"'>¥n"+
" <AuthnProperties>¥n"+
" <AuthnProperty name='"+LOGIN_USER+"' displayName='"+DISPLAY_USER+"' formFieldType='text' isId='true'/>¥n"+
" <AuthnProperty name='"+LOGIN_PASSWORD+"' displayName='"+DISPLAY_PASSWORD+"' formFieldType='password'/>¥n"+
" </AuthnProperties>¥n"+
" <SupportedApplications>¥n"+
" <SupportedApplication name='"+Constants.ADMINCONSOLE+"'/>¥n"+
" <SupportedApplication name='"+Constants.SELFPROVISION+"'/>¥n"+
" </SupportedApplications>¥n"+
"</LoginConfigEntry>¥n"+
LoginConfig エントリの例
次の LoginConfig エントリの例は、Identity Manager で提供されている LDAP リソースアダプタから引用されています。ここでは、dataSource 値が (指定されていない場合は) ユーザーによって指定される 2 つの認証プロパティーを定義しています。
コード例 4-4 は、サポートされているログインモジュールデータソースオプションを定義しています。
コード例 4-4 サポートされているログインモジュールデータソースオプションの定義
public static final String USER_DATA_SOURCE = "user";
public static final String HTTP_REMOTE_USER_DATA_SOURCE = "http remote user";
public static final String HTTP_ATTRIBUTE_DATA_SOURCE = "http attribute";
public static final String HTTP_REQUEST_DATA_SOURCE = "http request";
public static final String HTTP_HEADER_DATA_SOURCE = "http header";
public static final String HTTPS_X509_CERTIFICATE_DATA_SOURCE = "x509 certificate";
" <LoginConfigEntry name='"+WS_RESOURCE_LOGIN_MODULE+"'
type='"+LDAP_RESOURCE_TYPE+"'
displayName='"+Messages.RES_LOGIN_MOD_LDAP+"'>¥n"+
" <AuthnProperties>¥n"+
" <AuthnProperty name='"+LDAP_UID+"' displayName='"+Messages.UI_USERID_LABEL+"'
formFieldType='text' isId='true'/>¥n"+
" <AuthnProperty name='"+LDAP_PASSWORD+"'
displayName='"+Messages.UI_PWD_LABEL+"'
formFieldType='password'/>¥n"+
" </AuthnProperties>¥n"+
" </LoginConfigEntry>¥n"+
コード例 4-5 は、認証プロパティーの dataSource 値が、ユーザーによって指定されない場合のログイン設定エントリを示しています。この場合は、HTTP 要求ヘッダーから取得されます。
コード例 4-5 ログイン設定エントリ
" <LoginConfigEntry name='"+Constants.WS_RESOURCE_LOGIN_MODULE+"' |type='"+RESOURCE_NAME+"'
displayName='"+RESOURCE_LOGIN_MODULE+"'>¥n"+
" <AuthnProperties>¥n"+
" <AuthnProperty name='"+LOGIN_USER+"' displayName='"+DISPLAY_USER+"' formFieldType='text'
isId='true' dataSource='http header'/>¥n"+
" </AuthnProperties>¥n"+|
" </LoginConfigEntry>¥n"+
Windows NT オブジェクトのリソース属性の宣言
コード例 4-6 は、prototypeXML で、「リソースの作成」/「リソースの編集」ページに表示されるフィールドを定義する方法を示しています。
コード例 4-6 prototypeXML での「リソースの作成」/「リソースの編集」ページに表示されるフィールドの定義
<ResourceAttributes>
<ResourceAttribute name='Host' description='The host name running the resource
agent.' multi='false' value='n'>
</ResourceAttribute>
<ResourceAttribute name='TCP Port' description='The TCP/IP port used to communicate
with the LDAP server.' multi='false' value='9278'>
</ResourceAttribute>
<ResourceAttribute name='user' description='The administrator user name with which
the system should authenticate.' multi='false' value='Administrator'>
</ResourceAttribute>
<ResourceAttribute name='password' type='encrypted' description='The password that
should be used when authenticating.' multi='false' value='VhXrkGkfDKw='>
</ResourceAttribute>
<ResourceAttribute name='domain' description='The name of the domain in which
accounts will be created.' multi='false' value='nt'>
</ResourceAttribute>
</ResourceAttributes>
prototypeXML の Identity Manager レンダリング
Identity Manager 管理者インタフェースには、前の節で指定したように、デフォルトの Windows NT リソースのリソース属性が表示されます。
図 4-1 Windows NT リソースのリソース属性
スケルトンファイルの編集: 概要
SkeletonActiveSyncResourceAdapter ファイルは、管理者が特定のインスタンスを作成するために使用できる、新しい Active Sync 対応アダプタタイプの作成の出発点になります。このスケルトンファイルの名前を変更し、アダプタでサポートするデフォルト値を含むように編集したら、そのファイルを Identity Manager に読み込むことができます。
基本的な手順は次のとおりです。
- リソースアダプタタイプに名前を付けます。ここで付ける名前は、Identity Manager 管理者インタフェースの「新規リソース」メニューに表示されます。
- リソース属性を Identity Manager アカウント属性にマップします。それには、スケルトン prototypeXML 内のデフォルト値を編集して、このアダプタタイプのための独自のデフォルト値を作成する必要があります。たとえば、このファイルに含まれている、独自のアダプタタイプから RA_GROUPS 属性を削除することが必要な場合があります。
- スケルトンファイルにメソッドを追加または削除します。特に、このサンプルファイルではサポートされていない joins、leaves、および moves の操作をサポートするための Java コードを追加します。たとえば、Active Sync 対応アダプタが、HR データベースから情報をプルして従業員がまだアクティブかどうかを判定するように記述する必要があります。従業員のアクティブステータスの変更に基づいて更新をトリガーするには、データベース内の有効日列、検索する時間帯、以前の検索の繰り返しですでに実行されている更新のリストなどの、いくつかの項目が必要になります。
アダプタのネーミングと事前情報の編集
アダプタの事前情報を編集するには、次の 3 つの操作が必要です。
アダプタのオプションと属性の設定
アダプタタイプのオプションを設定するための主な方法として、受信したリソース属性の標準の Identity Manager アカウント属性へのマッピング、または独自の拡張スキーマ属性の作成があります。SkeletonActiveSyncResourceAdapter に含まれている属性は必須です。ファイルをカスタマイズするときに、これらの属性定義を削除しないでください。
リソース属性の標準のアカウント属性へのマッピング
リソース属性を標準の Identity Manager アカウント属性のいずれかにマップする場合は、コード例 4-7 に示す構文を使用します。
コード例 4-7 リソース属性のマッピング
"<AttributeDefinitionRef>¥nt"+
<ObjectRef type='AttributeDefinition' name='accountId'/>¥n"+
" </AttributeDefinitionRef>¥n"+
Identity Manager アカウント属性を特定するには、<AttributeDefinitionRef> 要素を使用します。表 4-17 は、<AttributeDefinitionRef> 要素のフィールドを示しています。
表 4-17 <AttributeDefinitionRef> 要素のフィールド
属性フィールド
説明
name
リソース属性がマップされる Identity Manager アカウント属性を特定します (Identity Manager ユーザーインタフェースにあるリソーススキーマページの左の列)。
mapName
受信したリソース属性の名前を特定します。このスケルトンファイルの編集時、change-value-here をこのリソース属性名に置き換えます。
mapType
受信した属性の型 (string、int、または encrypted) を特定します。
リソース属性の拡張スキーマ属性へのマッピング
受信したリソース属性を標準の Identity Manager 属性以外の属性にマップする場合は、拡張スキーマ属性を作成する必要があります。コード例 4-8 は、リソース属性をカスタムアカウント属性にマップする方法を示しています。
コード例 4-8 リソース属性のカスタムアカウント属性へのマッピング
<AccountAttributeType name='HomeDirectory' type='string'
mapName='HomeDirectory' mapType='string'>¥n"+
</AccountAttributeType>¥n"+
ObjectRef 型を宣言する必要がないことに注意してください。mapName フィールドは、カスタムアカウント属性 HomeDirectory を特定します。mapType フィールドは、属性を標準のアカウント属性にマップする場合と同様に定義できます。
定義したリソースの有効性 (特に、そのリソースへの接続) をテストするには、アダプタを保存し、Identity Manager に読み込んでから、「リソース」ページの「開始」をクリックします。「開始」ボタンは、そのリソースの起動タイプが「自動」または「手動」の場合にのみ有効になります。アダプタがスケジュールされると、そのアダプタの init() および poll() メソッドが呼び出されます。
識別名の設定
新しいリソースを作成する場合、Identity Manager はリソースアダプタに、そのリソースの XML オブジェクト定義であるプロトタイプリソースを作成するよう依頼します。
この識別名は、次の Identity Manager ユーザーインタフェースページに表示されます。
リソースがプロトタイプオブジェクトを提供する必要はありません。リソースに必要なのは、リソース属性を定義し、デフォルトを持つことに意味のあるリソース属性の、デフォルト値を設定することだけです。
リソースオブジェクトのクラス、タイプ、機能、および属性の定義
オブジェクトタイプによって、特定のタイプのリソースが一意に定義されます。オブジェクトタイプは、アダプタの prototypeXML セクションで定義されます。
オブジェクトタイプの定義
XML の <ObjectTypes> 要素は、アダプタの prototypeXML 内のコンテナであり、そのリソース上で管理される 1 つ以上のオブジェクトタイプ定義を含んでいます。
XML の <ObjectType> 要素は、<ObjectTypes> 要素内のコンテナであり、リソース固有のオブジェクトを Identity Manager に対して完全に記述しています。これには、次の情報が含まれます。
表 4-18 は、<ObjectType> 要素のサポートされている属性を示しています。
表 4-18 サポートされている <ObjectType> 要素
属性
説明
name
このオブジェクトタイプが、Identity Manager 内で表示または参照されるときに使用される名前を定義します (必須)。
icon
インタフェース内でこのタイプのオブジェクトの左に表示される .gif ファイルの名前を指定します。Identity Manager で使用するには、この .gif ファイルを idm/applet/images にインストールする必要があります。
container
true の場合は、このタイプのリソースオブジェクトに、同一かまたはほかのオブジェクトタイプの、ほかのリソースオブジェクトを含めることができることを示します。
オブジェクトタイプ定義の例
コード例 4-9 には、オブジェクトタイプ定義の例が含まれています。
コード例 4-9 オブジェクトタイプ定義の例
static final String prototypeXml ="<Resource name='Skeleton' class=
'com.waveset.adapter.sample.SkeletonStandardResourceAdapter'
typeString='Skeleton of a resource adapter' typeDisplayString='"+Messages.RESTYPE_SKELETON+"'>¥n"+
" <ObjectTypes>¥n"+
" <ObjectType name='Group' icon='group'>¥n"+
…other content defined below will go here…
" </ObjectType>¥n"+
" <ObjectType name='Role' icon='ldap_role'>¥n"+
... other content defined below will go here ...
" </ObjectType>¥n"+
" <ObjectType name='Organization' icon='folder_with_org' container='true'>¥n"+
... other content defined below will go here ...
" </ObjectType>¥n"+
" </ObjectTypes>¥n"+
オブジェクトクラス
LDAP ベースのリソースオブジェクトの場合、オブジェクトクラスは、ほかのリソースオブジェクトとは別の方法で処理されます。
LDAP ベースのリソースオブジェクト
LDAP ベースのリソースオブジェクトは、複数の LDAP オブジェクトクラスで構成できます。ここで、各オブジェクトクラスはその親オブジェクトクラスの拡張です。ただし、LDAP 内では、これらのオブジェクトクラスの完全なセットが、LDAP 内の単一のオブジェクトタイプとして表示および管理されます。
Identity Manager 内でこのタイプのリソースオブジェクトを管理するには、<ObjectType> 定義内に XML 要素 <ObjectClasses> を含めます。<ObjectClasses> 要素を使用すると、この <ObjectType> に関連付けられた一連のオブジェクトクラスや、これらのクラスの相互の関係を定義できます。
LDAP ベース以外のリソースオブジェクト
LDAP ベース以外のリソースオブジェクトの場合は、<ObjectType> を使用して、リソースオブジェクトタイプ名以外の情報を表すことができます。
コード例 4-10 で、primary 属性は、このタイプのオブジェクトを作成および更新するときに使用されるオブジェクトクラスを定義しています。この場合、inetorgperson は、リストされているほかのオブジェクトクラスのサブクラスであるため、第一のオブジェクトクラスとして定義されます。operator 属性は、このタイプのオブジェクトをリストまたは取得するときに、オブジェクトクラスのリストを 1 つ (論理 AND) として処理するか、または固有のクラス (論理 OR) として処理するかを指定します。この場合、Identity Manager は、このオブジェクトタイプに対するリストまたは要求取得の前に、これらのオブジェクトクラスに対して AND 操作を実行します。
コード例 4-10 inetorgperson オブジェクトクラスの使用
<ObjectClasses primary='inetorgperson' operator='AND'>¥n"+
<ObjectClass name='person'/>¥n"+
<ObjectClass name='organizationalPerson'/>¥n"+
<ObjectClass name='inetorgperson'/>¥n"+
</ObjectClasses>¥n"+
コード例 4-11 では、このタイプのリソースオブジェクトの作成または更新に対する要求はすべて、groupOfUniqueNames オブジェクトクラスを使用して実行されます。すべてのリストおよび取得要求で、オブジェクトクラスが groupOfNames または groupOfUniqueNames のどちらかであるすべてのオブジェクトに問い合わせが行われます。
コード例 4-11 groupOfUniqueNames オブジェクトクラスの使用
<ObjectClasses primary='groupOfUniqueNames' operator='OR'>¥n"+ <ObjectClass name='groupOfNames'/>¥n"+
<ObjectClass name='groupOfUniqueNames'/>¥n"+
</ObjectClasses>¥n"+
コード例 4-12 では 1 つのオブジェクトクラスしか定義されていないため、すべての create、update、list、および get 操作が、オブジェクトクラス organizationalUnit を使用して実行されます。
コード例 4-12 organizationalUnit オブジェクトクラスの使用
<ObjectClasses operator='AND'>¥n"+
<ObjectClass name='organizationalUnit'/>¥n"+
</ObjectClasses>¥n"+
オブジェクトクラスが 1 つしか存在しないため、<ObjectClasses> セクションを取り除くこともできます。取り除いた場合、オブジェクトクラスのデフォルトは、<ObjectType> の name 属性の値になります。ただし、オブジェクトタイプ名をリソースオブジェクトクラス名とは別にする場合は、単一の <ObjectClass> エントリを含む <ObjectClasses> セクションを含める必要があります。
オブジェクト機能
<ObjectFeatures> セクションは、このオブジェクトタイプでサポートされている 1 つ以上の機能のリストを指定します。ここで、各オブジェクト機能は、リソースアダプタ内の関連付けられたオブジェクトタイプメソッドの実装に直接関連付けられています。
各 ObjectFeature 定義には、機能名を指定する name 属性が含まれている必要があります。また、create および update 機能では、form 属性が指定される可能性があります。この属性は、create および update 機能の処理に使用されるリソースフォームを定義します。form 属性が指定されていない場合、Identity Manager はこれらの機能を、指定されたタイプのすべてのリソースで使用されるものと同じフォームを使用して処理します。
表 4-19 は、オブジェクト機能のマッピングを示しています。
表 4-19 オブジェクト機能のマッピング
オブジェクト機能
メソッド
form 属性のサポート
create
createObject
はい
delete
deleteObject
いいえ
find
listObjects
いいえ
リスト
listObjects
いいえ
rename
updateObject
いいえ
saveas
createObject
いいえ
update
updateObject
はい
view
getObject
いいえ
コード例 4-13 の <ObjectFeatures> セクションには、サポートされているすべてのオブジェクト機能が含まれています。リソースアダプタは、すべての機能またはそのサブセットをサポートできます。アダプタでサポートするオブジェクト機能が多くなればなるほど、Identity Manager 内のオブジェクト管理機能は豊富になります。
コード例 4-13 サポートされているすべてのオブジェクト機能を含む <ObjectFeatures> セクション
<ObjectFeatures>¥n"+
<ObjectFeature name='create' form='My Create Position Form'/>
<ObjectFeature name='update' form='My Update Position Form'/>
<ObjectFeature name='create'/>¥n"+
<ObjectFeature name='delete'/>¥n"+
<ObjectFeature name='rename'/>¥n"+
<ObjectFeature name='saveas'/>¥n"+
<ObjectFeature name='find'/>¥n"+
<ObjectFeature name='list'/>¥n"+
<ObjectFeature name='view'/>¥n"+
</ObjectFeatures>¥n"+
オブジェクト属性
<ObjectAttributes> セクションは、Identity Manager で管理および問い合わせされる属性セットを指定します。各 <ObjectAttribute> 要素の名前は、ネイティブなリソース属性名にすべきです。Identity Manager 内のユーザー属性とは異なり、属性マッピングは指定されません。ネイティブな属性名のみを使用してください。
表 4-20 は、<ObjectAttributes> に必要な属性を示しています。
表 4-20 <ObjectAttributes> の必須属性
属性
説明
idAttr
この属性の値は、リソースのオブジェクト名前空間内で、このオブジェクトを一意に特定するリソースオブジェクト属性名 (たとえば、dn、uid) になります。
displayNameAttr
この属性の値は、リソースオブジェクト属性名であり、その値は、Identity Manager 内でこのタイプのオブジェクトを表示するときに表示される名前 (たとえば、cn、samAccountName) になります。
descriptionAttr
(オプション) この属性の値は、「リソース」ページの「説明」列に値を表示する、リソースオブジェクト属性名になります。
コード例 4-14 は、<ObjectType> 内で定義された <ObjectAttributes> セクションを示しています。
コード例 4-14 <ObjectType> 内で定義された <ObjectAttributes> セクション
<ObjectAttributes idAttr='dn' displayNameAttr='cn' descriptionAttr=
'description'>¥n"+
<ObjectAttribute name='cn' type='string'/>¥n"+
<ObjectAttribute name='description' type='string'/>¥n"+
<ObjectAttribute name='owner' type='distinguishedname' namingAttr=
'cn'/>¥n"+
<ObjectAttribute name='uniqueMember' type='dn' namingAttr='cn' />¥n"+
</ObjectAttributes>¥n"+
各 <ObjectAttribute> には、表 4-21 に示す属性が含まれています。
表 4-21 <ObjectAttribute> の属性
属性
説明
name
リソースオブジェクトタイプの属性名を特定します (必須)
type
オブジェクトのタイプを特定します。有効なタイプには、string または distinguishedname / 'dn' (デフォルト値は string) があります
namingAttr
オブジェクトタイプが distinguishedname または dn である場合、この値は、Identity Manager 内で dn によって参照される、このオブジェクトタイプのインスタンスの表示に使用される値を持った属性を指定します
フォームの割り当て
受信したデータを Identity Manager に格納する前に、処理するためのオプションのフォームを割り当てることができます。このリソースフォームは、受信したデータをスキーママップから変換して、ユーザービューに適用するためのメカニズムです。また、サンプルフォームでは、従業員ステータスなどの、受信したデータの特定の値に基づいた (アカウントの有効化や無効化などの) 操作も実行しています。
リソースフォームの定義
Create 機能をサポートするリソースの各 <ObjectType> に対して、<resource type> Create <object type> Form という名前のリソースフォームを指定する必要があります。たとえば、AIX Create Group Form または LDAP Create Organizational Unit Form とします。
また、Update 機能をサポートするリソースの各 <ObjectType> に対して、<resource type> Update <object type> Form という名前の ResourceForm を指定する必要があります。たとえば、AIX Update Group Form または LDAP Update Organizational Unit Form とします。
表 4-22 は、トップレベルの名前空間に含まれている属性を示しています。特に指定されていない限り、すべての値が文字列です。
表 4-22 トップレベルの名前空間の属性
属性
説明
<objectType>.resourceType
Identity Manager のリソースタイプ名 (たとえば、LDAP、Active Directory)
<objectType>.resourceName
Identity Manager のリソース名
<objectType>.resourceId
Identity Manager のリソース ID
<objectType>.objectType
リソース固有のオブジェクトタイプ (たとえば、Group)
<objectType>.objectName
リソースオブジェクトの名前 (たとえば、cn または samAccountName)
<objectType>.objectId
リソースオブジェクトの完全修飾名 (たとえば、dn)
<objectType>.requestor
表示を要求しているユーザーの ID
<objectType>.attributes
リソースオブジェクト属性の名前と値のペア (オブジェクト)
<objectType>.organization
Identity Manager のメンバー組織
<objectType>.attrsToGet
checkoutView または getView を介したオブジェクトの要求時に返すオブジェクトタイプ固有の属性のリスト (リスト)
<objectType>.searchContex
フォーム入力内の非完全修飾名の検索に使用されるコンテキスト
<objectType>.searchAttributes
フォームに入力された名前の、指定された searchContext 内での検索に使用されるリソースオブジェクトタイプ固有の属性名のリスト (リスト)
<objectType>.searchTimeLimit
検索に費やされた最大時間。ここで、<objectType> は、リソース固有のオブジェクトタイプの小文字の名前です。たとえば、group、organizationalunit、organization になります。
<objectType>.attributes
<resource attribute name>指定されたリソース属性の値の取得または設定に使用されます (たとえば、<objectType>.attributes.cn。ここで、cn はリソース属性名)。リソース属性が識別名である場合、値の取得時に返される名前は、<ObjectType> の説明の <ObjectAttribute> セクションで指定された namingAttr の値です。
次の節では、リソースオブジェクトの名前空間にアクセスする方法の例を示す、フォームを参照します。
アダプタメソッドの記述Identity Manager のアダプタインタフェースは、特定の環境に応じてカスタマイズする必要のある、一般的なメソッドを提供しています。ここでは、これらのメソッドの概要と、次の内容について説明します。
標準リソースアダプタ固有のメソッド
リソースアダプタの本体は、リソース固有のメソッドで構成されています。そのため、リソースアダプタで提供されるメソッドは、記述しようとしている特定のメソッドのための、汎用のプレースホルダにすぎません。
ここでは、操作を実装するために使用されるメソッドが、どのように分類されるかについて説明します。これらの情報は、次のように構成されています。
プロトタイプリソースの作成
表 4-23 は、リソースインスタンスの作成に使用されるメソッドを示しています。
表 4-23 リソースインスタンスの作成に使用されるメソッド
メソッド
説明
staticCreatePrototypeResource
リソースアダプタで定義されている、定義済みのプロトタイプ XML 文字列からリソースインスタンスを作成します。static メソッドであるため、リソースアダプタである Java クラスへのパスのみがわかっている場合に呼び出すことができます。
createPrototypeResource
リソースアダプタクラスの Java オブジェクトのインスタンスが、すでに存在する場合にのみ実行できるローカルメソッド。通常、createPrototypeResource() の実装は、staticCreatePrototypeResource() メソッドの呼び出しだけです。
リソースへの接続
次のメソッドは、承認ユーザーとして接続および切断を確立する役割を果たします。すべてのリソースアダプタが、これらのメソッドを実装する必要があります。
接続と操作の確認
ResourceAdapterBase は、アダプタが実際の操作を試みる前に、操作の有効性 (そのリソースへの接続が機能してるかどうかなど) を確認するために使用できるメソッドを提供します。
表 4-24 に示すメソッドは、通信の確立が可能であり、承認されたアカウントにアクセス権があることを確認します。
表 4-24 通信の確認に使用されるメソッド
メソッド
説明
checkCreateAccount
リソース上でアカウントを作成できるかどうかを確認します。次の機能を確認できます。
このメソッドは、アカウントがすでに存在するかどうかを確認しません。このメソッドには、アカウント名、パスワード、ユーザー名などの、ユーザーアカウントを作成するために必要なアカウント属性情報が含まれています。
アカウントの作成が可能なことを確認したあと、このメソッドはリソースへの接続を閉じます。
checkUpdateAccount
接続を確立し、アカウントの更新が可能かどうかを確認します。
このメソッドは、入力としてユーザーオブジェクトを受け取ります。このメソッドには、アカウント名、パスワード、ユーザー名などの、ユーザーアカウントを作成するために必要なアカウント属性情報が含まれています。
ユーザーオブジェクトは、追加または変更されたアカウント属性を指定します。これらの属性のみが確認されます。
checkDeleteAccount
アカウントが存在し、削除可能かどうかを確認します。次の機能を確認できます。
このメソッドは、アカウントがすでに存在するかどうかを確認しません。このメソッドは、入力としてユーザーオブジェクトを受け取ります。このメソッドには、アカウント名、パスワード、ユーザー名などの、ユーザーアカウントを削除するために必要なアカウント属性情報が含まれています。
アカウントの削除が可能かどうかを確認したあと、このメソッドはリソースへの接続を閉じます。
機能の定義
getFeatures() メソッドは、アダプタでどの機能がサポートされているかを指定します。機能は、次のように分類できます。
ResourceAdapterBase クラスは、getFeatures() メソッドの基本実装を定義します。以下の表の「基本で有効」列は、その機能が ResourceAdapterBase 内の基本実装で有効として定義されているかどうかを示します。
表 4-25 一般的な機能
機能名
基本で有効
コメント
ACTIONS
いいえ
前後の操作がサポートされているかどうかを示します。有効にするには、true 値を使用して supportsActions メソッドをオーバーライドします。
RESOURCE_PASSWORD_CHANGE
いいえ
リソースアダプタがパスワード変更をサポートしているかどうかを示します。有効にするには、supportsResourceAccount メソッドをオーバーライドします。
表 4-26 アカウントの機能
機能名
基本で有効
コメント
ACCOUNT_CASE_
INSENSITIVE_IDSはい
ユーザーアカウント名の大文字と小文字が区別されるかどうかを示します。アカウント ID の大文字と小文字が区別されるようにするには、false 値を使用して supportsCaseInsensitiveAccountIds メソッドをオーバーライドします。
ACCOUNT_CREATE
はい
アカウントを作成できるかどうかを示します。この機能を無効にするには、remove 操作を使用します。
ACCOUNT_DELETE
はい
アカウントを削除できるかどうかを示します。この機能を無効にするには、remove 操作を使用します。
ACCOUNT_DISABLE
いいえ
リソース上でアカウントを無効にできるかどうかを示します。この機能を有効にするには、true 値を使用して supportsAccountDisable メソッドをオーバーライドします。
ACCOUNT_EXCLUDE
いいえ
Identity Manager から管理アカウントを除外できるかどうかを判定します。この機能を有効にするには、true 値を使用して supportsExcludedAccounts メソッドをオーバーライドします。
ACCOUNT_ENABLE
いいえ
リソース上でアカウントを有効にできるかどうかを示します。リソース上でアカウントを有効にできる場合は、true 値を使用して supportsAccountDisable メソッドをオーバーライドします。
ACCOUNT_EXPIRE_
PASSWORDはい
アダプタのスキーママップ内に Identity Manager のユーザー属性 expirePassword が存在する場合は有効になります。この機能を無効にするには、remove 操作を使用します。
ACCOUNT_GUID
いいえ
リソース上に GUID が存在する場合、この機能を有効にするには put 操作を使用します。
ACCOUNT_ITERATOR
はい
アダプタがアカウント反復子を使用するかどうかを示します。この機能を無効にするには、remove 操作を使用します。
ACCOUNT_LIST
はい
アダプタがアカウントをリストできるかどうかを示します。この機能を無効にするには、remove 操作を使用します。
ACCOUNT_LOGIN
はい
ユーザーがアカウントにログインできるかどうかを示します。ログインを無効にできる場合は、remove 操作を使用します。
ACCOUNT_PASSWORD
はい
アカウントにパスワードが必要かどうかを示します。パスワードを無効にできる場合は、remove 操作を使用します。
ACCOUNT_RENAME
いいえ
アカウントの名前を変更できるかどうかを示します。この機能を有効にするには、put 操作を使用します。
ACCOUNT_REPORTS_DISABLED
いいえ
アカウントが無効になっているかどうかを、リソースが報告するかどうかを示します。この機能を有効にするには、put 操作を使用します。
ACCOUNT_UNLOCK
いいえ
アカウントのロックを解除できるかどうかを示します。アカウントのロックを解除できる場合は、put 操作を使用します。
ACCOUNT_UPDATE
はい
アカウントを変更できるかどうかを示します。アカウントを更新できない場合は、remove 操作を使用します。
ACCOUNT_USER_PASSWORD_ON_CHANGE
いいえ
パスワードの変更時にユーザーの現在のパスワードを指定する必要があるかどうかを示します。ユーザーの現在のパスワードが必要な場合は、put 操作を使用します。
表 4-27 グループの機能
機能名
基本で有効
コメント
GROUP_CREATE
GROUP_DELETE
GROUP_UPDATEいいえ
グループを作成、削除、または更新できるかどうかを示します。リソース上でこれらの機能がサポートされている場合は、put 操作を使用します。
表 4-28 組織単位の機能
機能名
基本で有効
コメント
ORGUNIT_CREATE
ORGUNIT_DELETE
ORGUNIT_UPDATEいいえ
組織単位を作成、削除、または更新できるかどうかを示します。リソース上でこれらの機能がサポートされている場合は、put 操作を使用します。
カスタムアダプタで getFeatures メソッドの ResourceAdapterBase 実装をオーバーライドする場合は、次のようなコードを追加します。
public GenericObject getFeatures() {
GenericObject genObj = super.getFeatures();
genObj.put(Features.ACCOUNT_RENAME, Features.ACCOUNT_RENAME);
genObj.remove(Features.ACCOUNT_UPDATE, Features.ACCOUNT_UPDATE);
.. other features supported by this Resource Adapter…
return genObj;
}
別のメソッド (supportsActions など) をオーバーライドすることによって機能を有効にするには、次のようなコードを追加します。
次の表は、リソース上のアカウントを作成、削除、および更新するために使用されるメソッドを示しています。
表 4-29 リソース上のアカウントの作成
メソッド
説明
realCreate()
リソース上のアカウントを作成します。
入力としてユーザーオブジェクトを受け取ります。このメソッドには、ユーザーアカウントを作成するために必要なアカウント属性情報 (アカウント名、パスワード、ユーザー名など) が含まれています。
表 4-30 リソース上のアカウントの削除
メソッド
説明
realDelete()
リソース上のアカウントを削除します。
入力として、ユーザーオブジェクトまたはユーザーオブジェクトのリストを受け取ります。デフォルトでは、このメソッドはリスト内のユーザーオブジェクトごとに接続を作成し、realDelete を呼び出し、接続を閉じます。
表 4-31 リソース上のアカウントの更新
メソッド
説明
realUpdate()
アカウント属性のサブセットを更新します。
デフォルトでは、このメソッドはリスト内のユーザーオブジェクトごとに接続を作成し、realUpdate を呼び出し、接続を閉じます。
表 4-32 ユーザー情報の取得
メソッド
説明
getUser()
リソースからユーザー属性に関する情報を取得します。
入力としてユーザーオブジェクト (通常は、1 つのアカウントアイデンティティーセットだけを含む) を受け取り、リソーススキーママップで定義されている、任意の属性に対して設定された値を含む新規ユーザーオブジェクトを返します。
リストメソッドを使用すると、アダプタがリソースからユーザー情報を取得するために使用するプロセスを確立できます。
表 4-33 リストメソッド
メソッド
説明
getAccountIterator()
リソースからすべてのユーザーを検出またはインポートするために使用されます。
リソースのすべてのユーザーに対して処理を繰り返すために、アカウント反復子のインタフェースを実装します。
listAllObjects ()
リソースオブジェクトタイプ (accountID やグループなど) が指定されると、リソースからそのタイプのリストを返します。
リソースグループや配布リストのリストなどの、リソースで使用されているリストを生成するには、このメソッドを実装します。
このメソッドは、プロビジョニングエンジンからではなく、ユーザーフォームから呼び出されます。
コード例 4-15 には、リソース上の情報を取得し、それを Identity Manager が操作できる情報に変換するためのコードが含まれています。
コード例 4-15 リソースアダプタ: リソース上の情報の取得
public WSUser getUser(WSUser user)
throws WavesetExceptionString identity = getIdentity(user);
WSUser newUser = null;try {
startConnection();Map attributes = fetchUser(user);
if (attributes != null) {
newUser = makeWavesetUser(attributes);
}
} finally {
stopConnection();
}
return newUser;
}
表 4-34 有効化および無効化メソッド
メソッド
説明
supportsAccountDisable()
リソースがネイティブアカウントの無効化をサポートしているかどうかに応じて、true または false を返します。
realEnable()
リソース上のユーザーアカウントを有効にするために必要な、ネイティブな呼び出しを実装します。
realDisable()
リソース上のユーザーアカウントを無効にするために必要な、ネイティブな呼び出しを実装します。
ユーザーアカウントの無効化
リソースでサポートされている無効化ユーティリティー、または Identity Manager で提供されるアカウント無効化ユーティリティーを使用することにより、アカウントを無効にすることができます。
- アカウント無効化のネイティブサポート: 特定のリソースでは、設定されるとユーザーをログインできなくする、個別のフラグが提供されています。このユーティリティーの例には、NT 用のユーザーマネージャー、Active Directory 用の Active Directory ユーザーとコンピュータ、NDS/Netware 用の ConsoleOne または Netware Administrator などがあります。アカウントが有効になると、ユーザーの元のパスワードが引き続き有効になります。supportsAccountDisable メソッドを実装することによって、リソース上でアカウント無効化のネイティブサポートが使用可能かどうかを判定できます。
- Identity Manager の無効化ユーティリティー: リソースがアカウントの無効化をサポートしていない場合、またはユーザーのパスワードのリセットによって無効化をサポートしている場合は、Identity Manager プロビジョニングエンジンがアカウントを無効にします。ランダムに生成され、表示も保持もされないパスワードをユーザーアカウントに設定することによって、無効化を実行できます。アカウントが有効になると、システムによって新規パスワードがランダムに生成され、それが Identity Manager 管理者インタフェースに表示されるか、または電子メールでユーザーに送信されます。
リソースタイプのパススルー認証の有効化
リソースタイプのパススルー認証を有効にするには、次の一般的な手順を使用します。
- アダプタの getFeatures() メソッドが、サポートされている機能として ResourceAdapter.ACCOUNT_LOGIN を返すことを確認してください。
- カスタムアダプタで ResourceAdapterBase 実装をオーバーライドする場合は、次のコードを追加します。
public GenericObject getFeatures() {
GenericObject genObj = super.getFeatures();
genObj.put(Features.ACCOUNT_RENAME, Features.ACCOUNT_RENAME);
.. other features supported by this Resource Adapter…
return genObj;
}- カスタムアダプタで ResourceAdapterBase クラス内の getFeatures() 実装をオーバーライドしない場合は、ACCOUNT_LOGIN に対してデフォルトでエクスポートされた getFeatures() 実装が継承されます。
- アダプタの prototypeXML に <LoginConfigEntry> 要素を追加します。
- アダプタの authenticate() メソッドを実装します。
authenticate() メソッドは、loginInfo マップで提供された認証プロパティーの名前と値のペアを使用して、リソースに対してユーザーを認証します。認証が成功した場合は、次のように結果を追加することにより、認証された一意の ID が WavesetResult で返されるようにしてください。
result.addResult(Constants.AUTHENTICATED_IDENTITY, accountID);
認証は成功したが、ユーザーのパスワードの期限が切れた場合は、上で追加した ID に加えて、返される結果にパスワード期限切れインジケータも追加します。これにより、ユーザーが Identity Manager への次回のログイン時に、少なくともリソース上のパスワードの変更を強制されるようになります。
result.addResult(Constants.RESOURCE_PASSWORD_EXPIRED, new Boolean(true));
(ユーザー名またはパスワードが無効であるために) 認証が失敗した場合は、次のようにします。
throw new WavesetException("Authentication failed for " + uid + ".");
Active Sync 固有のメソッドの記述
アダプタのこのセクションでは、Identity Manager の更新という、アダプタの主要なタスクを実行するためのメソッドを提供する必要があります。記述するメソッドは、スケルトンアダプタファイルで提供されている汎用のメソッドに基づきます。
タスクごとに分類された、これらのメソッドのいくつかを編集する必要があります。これらのタスクを処理するための一般的なガイドラインについて、以下の節で説明します。
アダプタの初期化とスケジューリング
アダプタの初期化とスケジューリングは、init() および poll() メソッドを実装することによって行います。
init() メソッドは、アダプタマネージャーがアダプタを読み込んだときに呼び出されます。アダプタを読み込む方法には、次の 2 つがあります。
初期化プロセスで、アダプタは独自の初期化を実行できます。一般に、この処理には、ログの初期化 (ActiveSyncUtil クラスを使用) や、更新イベントを受信するためのリソースへの登録などの、アダプタ固有の任意の初期化が含まれます。
例外がスローされた場合、アダプタは停止され、読み込み解除されます。
リソースのポーリング
アダプタの機能はすべて、poll() メソッドによって実行されます。アダプタをスケジュールするには、poll() メソッドを、リソース上の変更された情報を検索して取得するように設定する必要があります。
このメソッドは、Active Sync 対応アダプタのメインのメソッドです。アダプタマネージャーは、リモートリソースの変更をポーリングするために poll() メソッドを呼び出します。次に、この呼び出しによって変更が IAPI 呼び出しに変換され、サーバーに戻されます。このメソッドは独自のスレッド上で呼び出され、必要な期間だけブロックできます。
このメソッドは、自身の ActiveSyncUtil インスタンスの isStopRequested メソッドを呼び出し、true の場合は戻るはずです。変更をループ処理する場合は、ループ条件の一部として isStopRequested をチェックしてください。
ポーリングのデフォルト値を設定するために、アダプタファイル内のポーリング関連のリソース属性を設定できます。これらのポーリング関連の属性を設定すると、あとで Identity Manager インタフェースを使用して、ポーリング間隔の開始時刻や日付、間隔の長さなどを設定するための手段が、管理者に提供されます。
スケジューリングパラメータ
Active Sync 対応アダプタでは、次のスケジューリングパラメータが使用されます。
これらのパラメータについては、表 4-12 で説明します。
prototypeXML 内のスケジューリングパラメータ
スケジューリングパラメータは、ActiveSync の文字列定数 ACTIVE_SYNC_STD_RES_ATTRS_XML や、ほかのすべての一般的な Active Sync 関連のリソース属性に存在します。
サンプルのポーリングシナリオ
次の表は、いくつかのサンプルのポーリングシナリオを示しています。
表 4-35 サンプルのポーリングシナリオ
ポーリングシナリオ
パラメータ
毎日午前 2 時
Interval = day, count =1, start_time=0200
毎日 4 回
Interval=hour, count=6.
隔週の木曜日午後 5 時にポーリング
Interval = week, count=2, start date = 20020705 (木曜日), time = 17:00.
アダプタ属性の格納と取得
ほとんどの Active Sync 対応アダプタは、標準アダプタでもあります。ここでは、1 つの Java クラスが、ResourceAdapterBase (または AgentResourceAdapter) の拡張と、ActiveSync インタフェースの実装の両方を行います。
したがって、コード例 4-16 に示すように、属性の取得と更新は基底クラスに渡すようにしてください。
コード例 4-16 属性の取得と更新
public Object getAttributeValue(String name) throws WavesetException {
return getResource().getResourceAttributeVal(name);
}
public void setAttributeValue(String name, Object value) throws WavesetException {
getResource().setResourceAttributeVal(name,value);
Identity Manager リポジトリの更新
更新を受信すると、アダプタは IAPI クラス、特に IAPIFactory を使用して次の処理を行います。
変更の Identity Manager オブジェクトへのマッピング
リソースに対する Active Sync のイベントパラメータ設定プログラムを使用して、IAPIFactory.getIAPI は、変更された属性のマップから IAPI オブジェクト (IAPIUser または IAPIProcess のどちらか) を作成します。リソースに対して除外規則 (iapi_create、iapi_delete、または iapi_update) が設定されている場合、IAPIFactory は、そのアカウントが除外されるかどうかを確認します。null 以外のオブジェクトが作成され、Factory によって返された場合、アダプタはその IAPI オブジェクトを変更 (たとえば、ロガーを追加) して送信することができます。
オブジェクトが送信されると、リソースに関連付けられたフォームは、オブジェクトビューがチェックインされる前にそのビューを使用して展開されます。フォームとビューの詳細については、『Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。
SkeletonActiveSyncResourceAdapter では、このプロセスは buildEvent および processUpdates メソッドで処理されています。
アダプタの停止
アダプタの停止に関連したシステム要件はありません。これはシステムクリーンアップでの作業です。
カスタムアダプタのインストールカスタマイズしたリソースアダプタをインストールするには、次の手順に従います。
- NewResourceAdapter.class ファイルを、Identity Manager インストールディレクトリの次の場所に読み込みます。
idm/WEB-INF/classes/com/waveset/adapter/sample
このディレクトリを作成することが必要な場合もあります。
- .gif ファイルを idm/applet/images にコピーします。
この .gif ファイルは、「リソースのリスト」ページでリソース名の横に表示されるイメージで、このファイルにはサイズが 18x18 ピクセル (72 DPI) のリソースのイメージを含めるようにしてください。
- このクラスを config/waveset.properties 内の resource.adapter プロパティーに追加します。
- アプリケーションサーバーを停止して再起動します (アプリケーションサーバーの操作については、『Identity Manager インストール』を参照)。
- リソースの HTML ヘルプファイルを作成します。例については、com/waveset/msgcat/help/resources ディレクトリにある idm.jar を参照してください。また、アプリケーションにオンラインヘルプを組み込む方法の手順については、『Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。
- アダプタとそれに関連したヘルプファイルを Identity Manager にインストールします。
- アダプタを使用して、Identity Manager 内にリソースを作成します。
- リソースを起動し、接続を確認します。
カスタムアダプタの保守Identity Manager サービスパックをインストールした場合は、新しい idmcommon.jar および idmformui.jar ファイルを使用してカスタムリソースをテストする必要があります。新しいリリースまたはサービスパックで加えられた変更に適応するために、カスタムアダプタの変更や拡張が必要になる場合があります。あるいは、インストール内でリソースアダプタを再ビルドまたは更新するだけで済む場合もあります。
アダプタの保守の詳細については、『Identity Manager 管理ガイド』を参照してください。
アダプタのテストアダプタを記述したら、それをテストして Identity Manager に読み込む必要があります。テストには、Identity Manager からのテストと、独自のマシン上でのユニットテストの実行の両方が含まれます。
定義したリソースの有効性 (特に、そのリソースへの接続) をテストするには、アダプタを保存し、Identity Manager に読み込んでから、「リソースのリスト」ページの「開始」をクリックします。「開始」ボタンは、そのリソースの起動タイプが「自動」または「手動」の場合にのみ有効になります。
この節は、次のように構成されています。
カスタムアダプタのテスト
アダプタをデバッグするための 1 つのツールとして、すべてのアダプタが生成するログファイルがあります。このログファイルは $WSHOME/config ディレクトリ内に生成され、WSTrace1.log という名前が付けられます。
注
ログが生成されるには、トレースが有効になっていて、トレースの要求対象のメソッドが特定されている必要があります。この操作は、Identity Managerの「デバッグ」ページ、またはコマンド行ユーティリティーを使用して実行できます。また、カスタムアダプタにも、新しいメソッドのログエントリを作成するための、呼び出しが含まれている必要があります。
アダプタは、すべてのリソース設定をログファイルに書き込みます。これを使用すると、アダプタが起動されたこと、および設定変更が保存されたことの両方を検証できます。
ActiveSyncUtil インスタンスへのログ呼び出しを行う Active Sync 対応アダプタは、「ログファイルパス」リソース属性で指定されたディレクトリ内に 1 つの (または一連の) ログファイルを作成します。これらのログファイルを確認して、Active Sync 関連のログエントリがほかにないかどうかを調べてください。
一般的な手順
アダプタをデバッグする場合は、次の一般的な手順に従います。
- アダプタのためのテストプログラムを作成します。
この Java ファイルでは、次の基本的な機能を実行するようにしてください。
- デバッグのレベルに応じて、ログレベルを設定します。最初のデバッグでは、ログレベルを 4 に増やし、ログファイルのパスとサイズを設定します。その後アダプタを起動すると、そのアダプタがすべてのリソース設定をログファイルに書き込みます。これを使用すると、アダプタが起動されたこと、および設定変更が保存されたことの両方を検証できます。
- アダプタをコンパイルしてテストします。テストプログラムをコンパイルするには、javac -d . test/filename.java を使用します。このコマンドによって、適切な com/waveset/adapter/test ディレクトリ内にクラスファイルが作成されます。このファイルを使用して新しいアダプタをテストするには、コンパイルされたアダプタが com/waveset/adapter ディレクトリに存在することを確認してから、次のコマンドを使用して実行します。
java −D waveset.home=<path> com.waveset.adapter.test.MyResourceAdapter
- リソースの HTML ヘルプファイルを作成します。例については、com/waveset/msgcat/help/resources ディレクトリにある idm.jar を参照してください。アプリケーションにオンラインヘルプを組み込む方法の手順については、『Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。
- (Active Sync 対応アダプタのみ) 最後のリソースに対する同期をリセットするには、XmlData SYNC_resourceName オブジェクトを削除します。
- エラーログを読み取り、アダプタを変更します。
- デバッグレベルを 2 に設定します。レベル 2 のデバッグでは、アダプタ設定と任意のエラーに関する情報が生成されますが、詳細ログの量は管理しやすいレベルに制限されます。
- Identity Manager を起動する前に、$WSHOME/config/waveset.properties ファイル内で新しいアダプタを特定する必要があります。このためには、アダプタの名前を resource.adapters エントリの下に配置する必要があります。そうしないと、Identity Manager がそのアダプタを認識しません。
- アダプタとそれに関連したヘルプファイルを Identity Manager にインストールします。
注
新しいアダプタのインスタンスを表示で認識できるようにするには、そのタイプの新しいリソースを作成する必要があります。この操作は、「リソースのリスト」ページで実行できます。このページから、「新規」>「新しいアダプタ」を選択します。リソースウィザードを使用して新しいアダプタを作成します。
- Identity Manager を使用して、リソースと、そのリソース上のユーザーを作成します。
ヒント
Active Sync 対応アダプタをデバッグしているとき、XmlData SYNC_resourceName オブジェクトを編集して、「デバッグ」ページから ActiveSync 同期プロセスの MapEntry を削除すると、アダプタは最初に検出された変更から起動し直します。
IAPI イベントを使用した場合は、Property() メソッドを設定して、そのリソースの同期状態 (last change processed 値など) を格納するようにします。このメソッドの設定は、アダプタのデバッグに非常に有効です。動作させて過去の変更を無視するように、アダプタを設定できます。その後、アダプタを変更し、その変更の結果をアダプタログファイルで確認できます。
テストアダプタ内のメソッドのトレース
テストアダプタ内のメソッドをトレースするには、次の手順に従います。
Identity Manager でのリソースオブジェクトのテスト
Identity Manager 管理者インタフェースの「リソースの検索」および「リソースのリスト」ページを通して実装をテストできます。
- 「リソース」>「リソースのリスト」を選択して、次のパフォーマンス特性を確認します。
表 4-36 リソースのリストのパフォーマンス特性
インタフェースでの期待される動作
異なっていた場合の処置
Identity Manager の新しいリソースのドロップダウンリストに、作成したリソースタイプが含まれている。
作成したリソースタイプを、Waveset.properties ファイル内の resource.adapters 属性に追加したことを確認してください。
リソースフォルダを開いたとき、その内容に、リソースアダプタの <ObjectTypes> セクションで定義されているすべての <ObjectType> 要素が反映されている。
アダプタの prototypeXML 内の <ObjectType> 要素を確認してください。
リソースオブジェクトタイプの 1 つを右クリックしたとき、リソースアダプタの <ObjectType> ごとの <ObjectFeatures> セクションで指定された、サポートされているすべての機能がメニューから選択できる。
「デバッグ」ページに移動し、問題のリソースを表示または編集して、問題の <ObjectType> に対する <ObjectFeatures> のリストが正しいことを確認してください。
新しいリソースを作成したり、既存のリソースオブジェクトを更新したりできる。
リソースアダプタコードが Web-INF/classes/com/waveset/adapter/sample に含まれていることを確認してください。
操作のタイプごとに正しい ResourceForms が読み込まれている。
- 「リソース」>「リソースの検索」を選択して、次のパフォーマンス特性を確認します。
表 4-37 リソースの検索のパフォーマンス特性
インタフェースでの期待される動作
異なっていた場合の処置
「リソース」>「リソースの検索」ページから、期待されるすべての属性を設定できる
すべての <ObjectType> 要素と、それに関連付けられた <ObjectAttribute> 要素を確認してください。
リソース検索要求が適切なリソースオブジェクトを返す
クエリーの引数を二重にチェックして、適切な一連のリソースオブジェクトが、そのクエリーに一致することを確認してください。それでも機能しない場合は、別の LDAP ブラウザから同じクエリーを試行して、それがクエリーによる問題ではないことを確認してください。
検索要求から返されたオブジェクトを編集または削除できる。
問題の <ObjectType> の <ObjectFeatures> セクションに、編集を有効にする Update 機能、または削除を有効にする Delete 機能が含まれていることを確認してください。
リソースオブジェクトの表示
「デバッグ」ページからリソースオブジェクトを表示できます。「デバッグ」ページを開くには、「http://build_name/idm/debug」と入力します。
リソースアダプタクラスと Active Sync 対応アダプタクラスはすべて、既存の Identity Manager リソースクラスに基づいています。
リソースオブジェクトを表示するには、次の手順に従います。
一般的なエラー
一般的なエラーには、次のものがあります。
フォーム関連のエラー
Active Sync 対応アダプタでの一般的なエラーは、フォーム関連のエラーです。これらのエラーは通常、パスワードや電子メールなどの必須フィールドが設定されていないために発生します。
フォームの検証エラーは、表示の最後の xml のあとに出力されます。一般的なエラーは、次のように表示されます。
20030414 17:23:57.469: result from submit (blank means no errors):
20030414 17:23:57.509: Validation error: missing required field password
すべてメッセージも同時に出力され、アカウントの作成および更新時刻、アダプタエラー、スキーママップデータの概要などが指定されます。
リソースアダプタは、処理した最後の変更に関する情報を SYNC.resourceName XMLData オブジェクトに格納します。
認証プロパティーが存在しない
必要な認証プロパティー値が存在しない場合は、そのプロパティー名が、指定されたデータソースタイプのトレースにダンプされている、一連の名前に含まれていることを確認します。
一致するリソースアカウントを持つ Identity Manager ユーザーが見つからない
リソースアダプタの認証は成功しますが、一致したリソースアカウント ID を持つ Identity Manager ユーザーが見つからないことを示す例外がスローされます。そのユーザーに関連付けられたリソース accountId が、リソースアダプタの authenticate メソッドが返す ID と同じであることを確認します。
Identity Manager ユーザーのリソース accountId は、「デバッグ」ページで確認できます。一致しない場合は、authenticate メソッドが返す名前の内容を変更するか、または認証が返す ID に一致するリソース accountId が間違いなく生成されるようにリソースの ID テンプレートを変更するか、のどちらかを行う必要があります。
LoginConfig の変更のデバッグ
アダプタへの LoginConfig 関連の変更をデバッグするには、次の操作を行う必要があります。
Identity Manager のトレースの有効化
次のクラスに対する Identity Manager のレベル 1 のトレースを有効にします。
シングルサインオン (SSO) パススルー認証のテスト
SSO ログインモジュールを正しく設定したら、http ポートに直接 telnet 接続し、http 要求を login.jsp に送信できます。
次の要求を telnet セッションにペーストできます。
HEAD /idm/login.jsp HTTP/1.0
Accept: text/plain,text/html,*/*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: LOCALHOST
sm_user: Configurator
この要求には、HTTP ヘッダー sm_user を検索する SSO ログインモジュールが含まれています。この情報を telnet 画面にペーストしたら、ユーザーが正しくログインしたことを示すトレースを確認するようにしてください。
たとえば、コード例 4-17 を参照してください。
コード例 4-17 サンプル出力
2003.07.08 14:14:16.837 Thread-7 WSResourceLoginModule#checkForAuthenticatedResourceInfo()
Found authenticated resource accountId, 'Configurator@Netegrity SiteMinder' on Identity Manager user 'Configurator'. null null 2003.07.08 14:14:16.837 Thread-7
WSResourceLoginModule#checkForAuthenticatedResourceInfo()
Exit null null 2003.07.08 14:14:16.837 Thread-7 WSResourceLoginModule#login()
Exit, return code = true null null 2003.07.08 14:14:16.847
Thread-7 LocalSession#login() Login succeeded via Netegrity SiteMinder null null
2003.07.08 14:14:16.847 Thread-7 LocalSession#login() Overall authentication
succeeded null null 2003.07.08 14:14:16.897 Thread-7 LocalSession#checkIfUserDisabled() Entry null null 2003.07.08 14:14:16.897 Thread-7 LocalSession#checkIfUserDisabled() Exit null null 2003.07.08 14:14:16.927 Thread-7 LocalSession#login() Exit null null