![]() | |
Sun™ Identity Manager 8.0 配備ツール |
第 4 章
Identity Manager Web サービスでの SPML 1.0 の使用Service Provisioning Markup Language (SPML) 1.0 は、サービスプロビジョニングアクティビティーと通信するオープンインタフェースを提供するための OASIS 標準です。Identity Manager の Web サービスには、HTTP 用の SPML 要求を使用してアクセスします。
この章では、Identity Manager および Identity Manager Service Provider でサポートされる SPML 1.0 について説明しています。これには、サポートされる機能とその理由、SPML 1.0 サポートの設定方法、フィールドでのサポートの拡張方法に関する情報が含まれます。
説明する内容は次のとおりです。
注
Identity Manager は、SPML version 1.0 と version 2.0 の両方をサポートします。
この章で説明されている概念は、特に SPML 1.0 に関連していますが、この章の内容は第 5 章「Identity Manager Web サービスでの SPML 2.0 の使用」で説明される概念を理解するための基礎としても役立ちます。
開始する前にIdentity Manager Web サービスの操作を開始する前に、以下の節を確認してください。
対象読者
この章は、アプリケーション開発者および Identity Manager の配備、手続き型ロジックの実装、SPML 1.0 クラスを使用したサービスプロビジョニング要求メッセージのフォーマットや応答メッセージの解析などを担当する開発者を対象としています。
重要な注意点
SPML 1.0 を操作する前に、次の事柄に注意する必要があります。
- Identity Manager Web サービスインタフェースの操作で最適なパフォーマンスを得るには、Identity Manager に同梱されている OpenSPML ツールキットを使用してください。http://www.openspml.org/ Web サイトにある openspml.jar ファイルを使用すると、メモリーリークが発生する可能性があります。
- Service Provider REF キットには、Service Provider SPML インタフェースの使用方法を実演する SpmlUsage.java ファイルが含まれています。
- SPML 1.0 を使用して Identity Manager Service Provider (サービスプロバイダ) 機能にアクセスできます。これらの機能は、SPML version 2.0 では使用できません。
関連ドキュメントと Web サイト
SPML の使用方法に関する詳細については、この章で提供する情報に加えて、この節で示すマニュアルおよび Web サイトも参照してください。
推奨ドキュメント
SPML version 2.0 の使用方法の詳細については、本書の第 5 章「Identity Manager Web サービスでの SPML 2.0 の使用」を参照してください。
有用な Web サイト
OpenSPML の使用方法の詳細について参照したり、OpenSPML 1.0 Toolkit をダウンロードしたりするには、次の Web サイトにアクセスしてください。
SPML の設定SPML インタフェースを公開するには、特定のリポジトリオブジェクトをインストールおよび変更し、Waveset.properties ファイルを編集することにより、Identity Manager サーバーを正しく設定する必要があります。
SPML インタフェースを設定する手順については、次の節で説明します。
リポジトリオブジェクトのインストールと変更
次の表は、Identity Manager の SPML を設定するためにインストールして変更する必要のあるリポジトリオブジェクトを示しています。
Identity Manager には、sample/spml.xml ファイルで、SPML 設定オブジェクトのサンプルのセットが含まれています。sample/spml1.xml ファイルは、リポジトリの初期化時にデフォルトではインポートされないので、手動でインポートする必要があります。
このサンプル設定では、SPML ワーキンググループによって定義された作成中の標準スキーマを追跡するために、person クラスが定義されています。このクラスをカスタマイズしないでください。次の場合を除き、person クラスの標準スキーマとの一貫性を維持してください。
サービスプロバイダ SPML インタフェースを設定する場合は、Configuration:SPE SPML 設定オブジェクトをインストールして変更する必要があります。
次の (デフォルト) パスを使用して、サービスプロバイダ SPML インタフェースにアクセスします。
/servlet/spespml
たとえば、host:port 上の /idm コンテキスト内に Identity Manager を配備する場合、次の URL でインタフェースにアクセスできます。
http://host:port/idm/servlet/spespml
各表記の意味は次のとおりです。
- host は Identity Manager を実行しているマシンです。
- port は サーバーが待機している TCP ポートの番号です。
注
標準 SPML スキーマの最新情報については、SPML 1.0 仕様 (http://www.openspml.org/) を参照してください。
Waveset.properties ファイルの編集
次の表は、SPML 要求の承認方法を制御するために使用できる、Waveset.properties ファイル内の 3 つのオプションのエントリを示しています。
soap.epassword および soap.password プロパティーの編集
soap.username で指定されたユーザーは、プロキシユーザーと呼ばれます。
soap.username でプロキシユーザーを定義し、次のパスワードプロパティーのいずれか 1 つだけを指定できます。
Web サービスでは認証が必要ないため、プロキシユーザーの確立はクライアントにとって便利です。この設定は、Identity Manager サーバーが、ユーザーの認証を自身で処理する別のアプリケーションからのみアクセスされるポータル環境では、一般的な設定です。
警告
応答するサーバーが存在する HTTP ポートが一般にアクセス可能な場合、プロキシユーザーの使用は危険な設定になります。Identity Manager サーバーの URL を知っていて、SPML 要求を作成する方法を理解しているユーザーの場合、プロキシユーザーが実行する Identity Manager 操作を設定できます。
SPML 標準では、認証や承認を実行する方法が指定されていません。関連するいくつかの Web 標準規格が認証に使用できますが、これらの標準が一般的に使用されるようにはなっていません。現時点では、認証に対するもっとも一般的な当面のアプローチは、アプリケーションとサーバーの間での SSL の使用です。Identity Manager は、SSL の設定方法を指示していません。
プロキシユーザーまたは SSL を使用できない場合、Identity Manager では、クライアントがログインしたあとも以降の要求の認証に使用されるセッショントークンを維持できるようにする、SPML に対するベンダー固有の拡張がサポートされています。資格情報の指定のサポートを含む SpmlClient クラスの拡張である LighthouseClient クラスを使用して、ログイン要求を実行し、すべての SPML 要求内のセッショントークンを渡すことができます。
暗号化パスワードの作成
暗号化パスワードを作成するには、次のいずれかの方法を使用します。
設定オブジェクトの編集
アプリケーションには、SPML メッセージを送信したり、SPML 応答を受信したりするためのメカニズムが必要です。
Identity Manager で SPML を設定するには、次の設定オブジェクトを設定する必要があります。
Configuration:SPML オブジェクト
SPML オブジェクトには、公開する SPML スキーマの定義と、これらの SPML スキーマが Identity Manager ビューにマップされる方法に関する情報が含まれています。この情報は、設定オブジェクトの拡張として格納されている GenericObject を使用して表されます。
次の属性は、GenericObject、schemas、および classes で定義されます。
- schemas: 各文字列に 1 つの SPML <schema> 要素のエスケープされた XML が含まれている、文字列のリスト。SPML 要素は waveset.dtd では定義されていないため、Identity Manager XML ドキュメントに直接含めることはできません。代わりに、エスケープされたテキストとして含める必要があります。
- Classes: サポートされている SPML クラスと、これらのクラスがビューにマップされる方法に関する情報を含むオブジェクトのリスト。このリストには、SPML スキーマの schemas リストで定義されているクラスごとに 1 つのオブジェクトを定義します。
当初は、この 2 つのリストの区別がわかりにくいかもしれません。schemas リストに関する情報は、Identity Manager が SPML SchemaRequest メッセージに応答して何を返すかを定義します。クライアントがこの情報を使用すると、AddRequest などの、ほかのメッセージに含まれている可能性のある属性を理解できます。Identity Manager は、schemas リストの内容には関知しません。このリストは、単純にそのままクライアントに返されます。
SPML スキーマの定義は必須ではありません。Identity Manager は、スキーマがなくても機能します。SPML スキーマを定義していない場合、Identity Manager は、スキーマ要求メッセージを受信したあとに、空の応答を返します。スキーマがない場合、クライアントは、サポートされているクラスや属性についての既存の知識に依存する必要があります。
デフォルトの SPML 設定
次の例は、デフォルトの SPML 設定を示しています。簡潔にするために、SPML スキーマ定義のテキストは省略しています。
この例では、次の 2 つのクラスが定義されています。
クラス定義では、次の属性がサポートされています。
- name: クラスの名前を特定します。name 値は、SPML スキーマ内の <ObjectClassDefinition 要素に対応している場合がありますが、この値は必須ではありません。この名前を追加要求または検索要求での objectclass 属性の値として使用できます。
- type: このクラスのインスタンスの管理に使用される Identity Manager のビュータイプを定義します。通常は、この属性は User ですが、ビューを介してアクセスできる任意のリポジトリタイプにすることができます。ビューについては、『Sun JavaTM System Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。
- form: フォームを含む設定オブジェクトの名前を特定します。この属性には、このクラスで定義される外部の属性と内部のビュー属性の間での、変換のための規則が含まれています。
- default: true に指定されている場合は、この属性がこのタイプのみのデフォルトクラスであることを示します。同じタイプに対して複数の SPML クラスが実装されている場合は、1 つのクラスをデフォルトとして指定する必要があります。
- identifier: 各クラスは一般に、そのオブジェクトのアイデンティティーと見なされる 1 つの属性を定義します。可能な場合は、この属性の値が、そのインスタンスを表すために作成する対応したリポジトリオブジェクトの名前として使用されます。クラス定義内の identifier 属性は、どの属性がアイデンティティーを表すかを指定します。
- filter: SPML 検索要求をクラスに対して評価する場合は、一般に、そのクラスに関連付けられたすべてのリポジトリオブジェクトをその検索に含めます。このアプローチは、User オブジェクトについては問題ありませんが、一部のクラスは、TaskDefinition や Configuration などの、必ずしも SPML クラスのインスタンスとは見なされない、汎用的なタイプを使用して実装される可能性があります。
デフォルトのスキーマ
schemas 属性には、SPML <schema> 要素のエスケープされた XML を含む文字列のリストが含まれています。spml.xml ファイルを調べてみると、schema 要素が、CDATA でマークされたセクションで囲まれていることに気付きます。XML の長い文字列のエスケープには、CDATA でマークされたセクションを使用する方が便利です。Identity Manager が spml.xml ファイルを正規化すると、CDATA でマークされたセクションは < および > 文字エンティティーを含む文字列に変換されます。
デフォルト設定には、次の 2 つのスキーマが含まれます。
Configuration:SPMLPerson オブジェクト
Configuration:SPML で定義されている各クラスには一般に、そのクラスで定義された外部の属性モデルと、関連付けられたビューで定義された内部のモデルの間での、変換の規則を含むフォームオブジェクトが関連付けられています。
次の例は、標準の person クラスがフォームを参照する方法を示します。
コード例 4-2 標準の Person クラスでのフォームの参照
<Configuration name='SPMLPerson'>
<Extension>
<フォーム><Field name='cn'>
<Derivation><ref>global.fullname</ref></Derivation>
</Field>
<Field name='global.fullname'>
<Expansion><ref>cn</ref></Expansion>
</Field><Field name='email'>
<Derivation><ref>global.email</ref></Derivation>
</Field>
<Field name='global.email'>
<Expansion><ref>email</ref></Expansion>
</Field><Field name='description'>
<Derivation>
<ref>accounts[Lighthouse].description</ref>
</Derivation>
</Field>
<Field name='accounts[Lighthouse].description'>
<Expansion><ref>description</ref></Expansion>
</Field><Field name='password'>
<Derivation><ref>password.password</ref></Derivation>
</Field>
<Field name='password.password'>
<Expansion><ref>password</ref></Expansion>
</Field><Field name='sn'>
<Derivation><ref>global.lastname</ref></Derivation>
</Field>
<Field name='global.lastname'>
<Expansion><ref>sn</ref></Expansion>
</Field><Field name='gn'>
<Derivation><ref>global.firstname</ref></Derivation>
</Field>
<Field name='global.firstname'>
<Expansion><ref>gn</ref></Expansion>
</Field><Field name='telephone'>
<Derivation>
<ref>accounts[Lighthouse].telephone</ref>
</Derivation>
</Field>
<Field name='accounts[Lighthouse].telephone'>
<Expansion><ref>telephone</ref></Expansion>
</Field></Form>
</Extension>
</Configuration>
クラス定義内の属性ごとに、1 対のフィールド定義が存在します。1 つのフィールドは <Derivation> 式を使用して、内部のビュー属性 name を外部名に変換します。1 つのフィールドは <Expansion> 式を使用して、外部 name を内部 name に変換します。
このフォームは、属性がクライアントに返されるときは、<Derivation> 式の結果のみが含まれるという方法で処理されます。属性がクライアントからサーバーに送信されると、<Expansion> 式の結果のみがビューに反映されます。この効果は、リソース定義のスキーママップに似ています。
Configuration:IDM Schema Configuration オブジェクト
SPML 検索フィルタで属性を使用する場合は、これらの属性を Identity Manager ユーザーの拡張属性として定義する必要があります。Identity Manager は、その属性の値が同時にリソースアカウント属性として格納される場合でも、拡張属性をリポジトリ内に格納します。
拡張属性の数は最小限に抑えるようにしてください。拡張属性の数が多すぎると、リポジトリのサイズが増加するだけでなく、Identity Manager に格納された属性とリソース上に格納された属性の実際の値の間で、一貫性の問題が発生する可能性があります。Identity Manager クエリーで属性を使用するには、リポジトリのクエリーインデックスが作成されたときにその値がアクセス可能になるように、拡張属性として宣言する必要があります。
ユーザーの概要の属性のセットに属性を含める場合は、これらの属性を拡張属性として定義する必要があります。概要の属性を使用すると、オブジェクト XML のデシリアライズを回避することによって検索を最適化し、代わりにもっとも重要なユーザー属性の一部のみを返すことができます。Identity Manager SPML の実装では、返される属性のリストを検索要求で明示的に指定しない場合は、概要の属性が返されます。
次の例では、firstname、lastname、fullname、description、および telephone が IDMAttributeConfigurations で定義されたあとにユーザーの IDMObjectClassConfiguration に存在する拡張属性です。firstname、lastname、および telephone のみがクエリー可能かつ概要の属性です。
コード例 4-3 拡張属性として宣言された telephone と description
<Configuration name="IDM Schema Configuration"
id='#ID#Configuration:IDM_Schema_Configuration'
authType='IDMSchemaConfig'>
<IDMSchemaConfiguration>
<IDMAttributeConfigurations>
<!-- これは標準のセットである -->
<IDMAttributeConfiguration name='firstname'
syntax='STRING'/>
<IDMAttributeConfiguration name='lastname'
syntax='STRING'/>
<IDMAttributeConfiguration name='fullname'
syntax='STRING'/>
<!-- これらは、SPML の拡張である -->
<IDMAttributeConfiguration name='description'
syntax='STRING'/>
<IDMAttributeConfiguration name='telephone'
syntax='STRING'/>
</IDMAttributeConfigurations>
<IDMObjectClassConfigurations>
<IDMObjectClassConfiguration name='User'
extends='Principal'
description='User description'>
<IDMObjectClassAttributeConfiguration name='firstname'
queryable='true'
summary='true'/>
<IDMObjectClassAttributeConfiguration name='lastname'
queryable='true'
summary='true'/>
<IDMObjectClassAttributeConfiguration name='fullname'/>
<IDMObjectClassAttributeConfiguration name='description'/>
<IDMObjectClassAttributeConfiguration name='telephone'
queryable='true'
summary='true'/>
</IDMObjectClassConfiguration>
</IDMObjectClassConfigurations>
</IDMSchemaConfiguration>
</Configuration>
属性のリストは、サイトのニーズに応じてカスタマイズできます。
拡張属性として選択する名前は、クラスフォームで実行されるマッピングによって異なります。デフォルトの SPMLPerson フォームによって sn が lastname にマップされるため、拡張属性を lastname として宣言する必要があります。このフォームでは telephone または description の名前は変換されないため、拡張属性の名前は SPML スキーマから直接採用されます。
拡張属性を宣言するだけでなく、同じ Configuration: オブジェクトも変更して、どの属性をクエリー可能 (つまり、SPML フィルタで使用可能) にし、どの属性を (最適化された検索の結果によって返される) 概要の属性にするかを宣言する必要があります。
TaskDefinition:SPMLRequest オブジェクト
spml.xml ファイルにもまた、SpmlRequest という名前の新しいシステムタスクの簡単な定義が含まれています。このタスクは、非同期 SPML 要求を実装するために使用されます。サーバーが非同期要求を受信すると、このタスクの新しいインスタンスが起動され、その SPML メッセージがタスクへの入力変数として渡されます。その後サーバーが、あとの状態要求に対する SPML 応答で、タスクインスタンスのリポジトリ ID を返します。
<TaskDefinition name='SPMLRequest'
executor='com.waveset.rpc.SpmlExecutor'
execMode='asyncImmediate'
resultLimit='86400'>
</TaskDefinition>
定義の名前、executor の名前、および実行モードは変更しないでください。ただし、resultLimit 値は変更することができます。非同期要求が完了すると、通常システムはクライアントが結果を取得するための SPML 状態要求を発行できるように、その結果の値を指定された期間保持します。これらの結果が保持される期間は、サイト固有の値です。
正の resultLimit 値を使用して、タスクが完了したあとにシステムが結果を保持できる時間 (秒単位) を指定できます。SPMLRequests のデフォルト値は通常、3600 秒 (約 1 時間) です。ほかのタスクは、そのタスク名を別の値に変更しないかぎり、デフォルトで 0 秒になります。
負の場合、その要求インスタンスは自動的には削除されません。
配備記述子
Identity Manager の配備記述子 (通常、ファイル Web-INF/web.xml に含まれている) には、SPML 要求を受信するサーブレットの宣言が含まれるように編集する必要があります。
SPML Web サービスへの接続で問題が発生している場合は、web.xml ファイル内にあるサーブレット宣言を調べてください。次の例は、サーブレット宣言を示しています。
コード例 4-4 サーブレット宣言
<servlet>
<servlet-name>rpcrouter2</servlet-name>
<display-name>OpenSPML SOAP Router</display-name>
<description>no description</description>
<servlet-class>
org.openspml.server.SOAPRouter
</servlet-class>
<init-param>
<param-name>handlers</param-name>
<param-value>com.waveset.rpc.SimpleRpcHandler</param-value>
</init-param>
<init-param>
<param-name>spmlHandler</param-name>
<param-value>com.waveset.rpc.SpmlHandler</param-value>
</init-param>
<init-param>
<param-name>rpcHandler</param-name>
<param-value>com.waveset.rpc.RemoteSessionHandler</param-value>
</init-param>
</servlet>
この宣言を使用すると、次の URL を介して addRequest、modifyRequest、および searchRequest Web サービスにアクセスできます。
http://<host>:<port>/idm/servlet/rpcrouter2
各表記の意味は次のとおりです。
<servlet-mapping> を定義する必要はありません (ただし、定義することは可能)。このサーブレット宣言の内容を変更しないでください。
SPML ブラウザの起動OpenSPML Browser アプリケーションを使用して Identity Manager SPML 設定をテストできます。
ブラウザを起動するには、次の手順に従います。
Identity Manager サーバーへの接続Identity Manager サーバーに接続するには、次の手順に従います。
SPML 設定のテストとトラブルシューティングSPML 設定をテストするには、次の手順に従います。
正常な接続を確立できない場合は、次の操作を行います。
- 入力した URL が正しいかどうか確認します。
- 受信したエラーに「応答なし」や「接続が拒否されました」などの語句が含まれている場合、問題としてもっとも可能性が高いのは、接続 URL で使用されているホストまたはポートです。
- エラーによって、接続は確立されたが、Web アプリケーションまたはサーブレットが見つからなかったことが示されている場合、問題としてもっとも可能性の高いのは、Web-INF/web.xml ファイルです。詳細については、「配備記述子」を参照してください。
SPML アプリケーションの開発サーバーを設定したら、SPML アプリケーションに SPML メッセージを送信したり、SPML 応答を受信したりするためのメカニズムが必要になります。Java アプリケーションの場合は、OpenSPML ツールキットを使用して、このメカニズムを設定します。
注
Identity Manager Web サービスインタフェースの操作で最適なパフォーマンスを得るには、Identity Manager に同梱されている OpenSPML ツールキットを使用してください。
http://www.openspml.org/ Web サイトにある openspml.jar ファイルを使用すると、メモリーリークが発生する可能性があります。
このツールキットでは、次のコンポーネントが提供されます。
次の表は、OpenSPML ツールキットで提供される、もっとも重要なクラスの概要を示しています。要求の種類ごとに、対応するクラスが存在します。詳細については、ツールキットとともに配布されている JavaDoc を参照してください。
表 4-3 OpenSPML ツールキットで提供されるクラス
クラス
説明
AddRequest
新しいオブジェクトの作成を要求するメッセージを作成します。
オブジェクトのタイプは、objectclass 属性を渡すことによって定義されます。渡されるほかの属性は、このオブジェクトクラスに関連付けられたスキーマに従っている必要があります。SPML では、標準スキーマがまだ定義されていませんが、ほとんどすべてのスキーマをサポートするように Identity Manager を設定できます。BatchRequest
複数の SPML 要求を含むことができるメッセージを作成します。
CancelRequest
以前の非同期に実行された要求を取り消すメッセージを作成します。
DeleteRequest
オブジェクトの削除を要求するメッセージを作成します。
ModifyRequest
オブジェクトの変更を要求するメッセージを作成します。この要求には、変更する属性のみを含めます。要求に含まれていない属性は、現在の値を維持します。
SchemaRequest
サーバーでサポートされている、SPML オブジェクトクラスに関する情報を要求するメッセージを作成します。
SearchRequest
特定の条件に一致する、オブジェクトの属性を要求するメッセージを作成します。
SpmlClient
SPML メッセージを送受信するための単純なインタフェースを提供します。
SpmlResponse
サーバーから送り返された応答メッセージを表す、オブジェクトの基底クラスが含まれます。要求のクラスごとに、対応する応答クラスが存在します。たとえば、AddResponse および ModifyResponse などがあります。
StatusRequest
以前の非同期に実行された要求のステータスを要求するメッセージを作成します。
サービスプロバイダ REF キットには、サービスプロバイダ SPML インタフェースの使用方法を実演する SpmlUsage.java ファイルが含まれています。この REF キットには SpmlUsage クラスをコンパイルする ant スクリプトも含まれています。
使用方法:
java [ -Dtrace=true ] com.sun.idm.idmx.example.SpmlUsage [ URL ]
ここで URL は サービスプロバイダ SPML インタフェースをポイントしており、デフォルトでは次のようになります。
http://host:port/idm/spespml
各表記の意味は次のとおりです。
サービスプロバイダ のトレースを有効にすると、サービスプロバイダ SPML メッセージが標準出力に出力されます。
ExtendedRequest の例
次の表は、クライアントとの間でメッセージを送受信するために使用できる、さまざまな ExtendedRequest クラスを示しています。
表 4-4 メッセージを送受信するための ExtendedRequest クラス
ExtendedRequest
説明
changeUserPassword
ユーザーパスワードの変更を要求するメッセージを作成します。
deleteUser
ユーザーの削除を要求するメッセージを作成します。
disableUser
ユーザーの無効化を要求するメッセージを作成します。
enableUser
ユーザーの有効化を要求するメッセージを作成します。
launchProcess
プロセスの起動を要求するメッセージを作成します。
listResourceobjects
Identity Manager リポジトリ内のリソースオブジェクトの名前と、そのリソースでサポートされているオブジェクトのタイプを要求するメッセージを作成します。この要求では、名前のリストが返されます。
resetUserPassword
ユーザーパスワードのリセットを要求するメッセージを作成します。
runForm
Identity Manager Session API を呼び出すことによって取得される情報を返す、カスタム SPML 要求を作成できるようにします。
サーバーコードは、ExtendedRequests をビュー操作に変換します。
次の各節で、これらのクラスの標準的な形式を使用する例が提供されています。
ExtendedRequest の例
次の例は、ExtendedRequest の標準的な形式を示しています。
コード例 4-5 ExtendedRequest の形式
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("changeUserPassword");
req.setAttribute("accountId", "exampleuser");
req.setAttribute("password", "xyzzy");
req.setAttribute("accounts","Lighthouse,LDAP,RACF");
ExtendedResponse res = (ExtendedResponse) client.send(req);
ほとんどの SPML ExtendedRequests は、次の引数を受け入れます。
accounts 属性を渡さない場合は、この操作によって、そのユーザーにリンクされたすべてのリソースアカウント (Identity Manager のユーザーアカウントを含む) が更新されます。accounts を渡す場合は、指定した SPML 操作は指定したリソースのみを更新します。特定のリソースアカウントに加えて Identity Manager ユーザーを更新する場合は、null 以外のアカウントリストに Lighthouse を含める必要があります。
deleteUser の例
次の例は、deleteUser 要求の標準的な形式を示しています。
(ビュー > 「プロビジョン解除」ビュー)。
コード例 4-6 deleteUser 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("deleteUser");
req.setAttribute("accountId","exampleuser");
req.setAttribute("accounts","Lighthouse,LDAP,RACF");
ExtendedResponse res = (ExtendedResponse) client.send(req);
disableUser の例
次の例は、disableUser 要求の標準的な形式を示しています。
(ビュー > 「無効化」ビュー)。
コード例 4-7 disableUser 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("disableUser");
req.setAttribute("accountId","exampleuser");
req.setAttribute("accounts","Lighthouse,LDAP,RACF");
ExtendedResponse res = (ExtendedResponse) client.send(req);
enableUser の例
次の例は、enableUser 要求の標準的な形式を示しています。
(ビュー > 「有効化」ビュー)。
コード例 4-8 enableUser 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("enableUser");
req.setAttribute("accountId","exampleuser");
req.setAttribute("accounts","Lighthouse,LDAP,RACF");
ExtendedResponse res = (ExtendedResponse) client.send(req);
launchProcess の例
次の例は、launchProcess 要求の標準的な形式を示しています。
(ビュー > 「プロセス」ビュー)。
コード例 4-9 launchProcess 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("launchProcess");
req.setAttribute("process", "my custom process");
req.setAttribute("taskName", "my task instance");
ExtendedResponse res = (ExtendedResponse) client.send(req);
各表記の意味は次のとおりです。
残りの属性は任意であり、これらの属性はタスクに渡されます。
listResourceObjects の例
次の例は、listResourceObjects 要求の標準的な形式を示しています。
コード例 4-10 listResourceObjects 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("listResourceObjects");
req.setAttribute("resource", "LDAP");
req.setAttribute("type", "group");
ExtendedResponse res = (ExtendedResponse) client.send(req);
各表記の意味は次のとおりです。
resetUserPassword の例
次の例は、resetUserPassword 要求の標準的な形式を示しています (ビュー > 「ユーザーパスワードのリセット」ビュー)。
コード例 4-11 resetUserPassword 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("resetUserPassword");
req.setAttribute("accountId","exampleuser");
req.setAttribute("accounts","Lighthouse,LDAP,RACF");
ExtendedResponse res = (ExtendedResponse) client.send(req);
runForm の例
次の例は、runForm 要求の標準的な形式を示しています。
コード例 4-12 runForm 要求
ExtendedRequest req = new ExtendedRequest();
req.setOperationIdentifier("runForm");
req.setAttribute("form", "SPML Get Object Names");
ExtendedResponse res = (ExtendedResponse) client.send(req);
ここで、form は、フォームを含む設定オブジェクトの名前です。
フォームの例
次の例は、クエリーを実行し、現在のユーザーにアクセス可能なロール、リソース、および組織名のリストを返すフォームを示します。
コード例 4-13 クエリーフォーム
<Configuration name='SPML Get Object Names'>
<Extension>
<フォーム>
<Field name='roles'>
<Derivation>
<invoke class='com.waveset.ui.FormUtil'>
<ref>display.session</ref>
<s>Role</s>
</invoke>
</Derivation>
</Field>
<Field name='resources'>
<Derivation>
<invoke class='com.waveset.ui.FormUtil'>
<ref>display.session</ref>
<s>Resource</s>
</invoke>
</Derivation>
</Field>
<Field name='organizations'>
<Derivation>
<invoke class='com.waveset.ui.FormUtil'>
<ref>display.session</ref>
<s>ObjectGroup</s>
</invoke>
</Derivation>
</Field>
</Form>
</Extension>
</Configuration>
runForm 要求を使用し、Identity Manager Session API を呼び出すことで、取得される情報を返すカスタム SPML 要求を作成できます。たとえば、ユーザーを編集するためのユーザーインタフェースを設定する場合は、ユーザーに割り当てることのできる組織、ロールリソース、およびポリシーの名前を表示するセレクタの提供が必要になることがあります。
これらのオブジェクトを SPML オブジェクトクラスとして公開するように SPML インタフェースを設定し、searchRequest を使用してそれらの名前をクエリーできます。ただし、この設定では、情報を収集するために 4 つの searchRequests が必要になります。SPML 要求の数を減らすには、単一の runForm 要求を使用してクエリーをフォーム内にコード化したあと、クエリーを実行し、結合された結果を返します。
SPML でのトレースの使用
Identity Manager の SPML トラフィックをロギングし、問題の診断に役立てることができるように、SPML には、次のようなトレース出力を有効にするためのオプションが含まれています。
SPML のトレースの詳細については、『Identity Manager Tuning, Troubleshooting, and Error Messages』の「Tracing and Troubleshooting Identity Manager」の章を参照してください。
SPML を実装するためのメソッドの例ここでは、SPML を実装するためのいくつかの一般的なメソッドを示す、次の例について説明します。
追加要求
コード例 4-14 に、追加要求の例を示します。
コード例 4-14 追加要求
SpmlClient client = new SpmlClient();
client.setURL("http://example.com:8080/idm/spml");AddRequest req = new AddRequest();
req.setObjectClass("person");
req.setIdentifier("maurelius");
req.setAttribute("gn", "Marcus");
req.setAttribute("sn", "Aurelius");
req.setAttribute("email", "maurelius@example.com");SpmlResponse res = client.request(req);
if (res.getResult() .equals(SpmlResponse.RESULT_SUCCESS))
System.out.println("Person was successfully created");
変更要求
ここでは、認証された SPML 変更要求の 2 つの例を示します。
コード例 4-15 認証された SPML 要求
SpmlClient client = new SpmlClient();
client.setURL("http://example.com:8080/idm/spml");ModifyRequest req = new ModifyRequest();
req.setIdentifier("maurelius");
req.setModification("email", "marcus.aurelius@example.com");SpmlResponse res = client.request(req);
if (res.getResult() .equals(SpmlResponse.RESULT_SUCCESS))
System.out.println("Person was successfully modified");
コード例 4-16 LighthouseClient を使用して認証された SPML 要求
LighthouseClient client = new LighthouseClient();
client.setURL("http://example.com:8080/idm/spml");
client.setUser("maurelius");
client.setPassword("xyzzy");ModifyRequest req = new ModifyRequest();
req.setIdentifier("maurelius");
req.setModification("email", "marcus.aurelius@example.com");SpmlResponse res = client.request(req);
if (res.getResult() .equals(SpmlResponse.RESULT_SUCCESS))
System.out.println("Person was successfully modified");
これらの例の唯一の違いは、コード例 4-16 では LighthouseClient クラス、および client.setUser と client.setPassword への 2 つの追加のメソッド呼び出しを使用している点です。たとえば、この例を使用して、Waveset.properties 内でのプロキシユーザーの設定を回避できます。この結果、プロキシユーザーの代わりに、指定されたユーザーを反映する監査ログを取得できます。
この例では、要求が送信されたときに、client.setUser と client.setPassword によって認証されます。
検索要求
検索要求の例をコード例 4-17 に示します。
コード例 4-17 検索要求
SpmlClient client = new SpmlClient();
client.setURL("http://example.com:8080/idm/spml");
SearchRequst req = new SearchRequest();
// 返す属性を指定する
req.addAttribute("sn");
req.addAttribute("email");
// フィルタを指定する
FilterTerm ft = new FilterTerm();
ft.setOperation(FilterTerm.OP_EQUAL);
ft.setName("gn");
ft.setValue("Jeff");
req.addFilter(ft);
SearchResponse res = (SearchResponse)client.request(req);
// 結果を表示する
List results = res.getResults();
if (results != null) {for (int i = 0 ; i < results.size() ; i++) {
SearchResult sr = (SearchResult)results.get(i);
System.out.println("Identifier=" +
sr.getIdentifierString() +
" sn=" +
sr.getAttribute("sn") +
" email=" +
sr.getAttribute("email"));
}
}