| |
| Sun™ Identity Manager 8.0 配備ツール | |
第 5 章
Identity Manager Web サービスでの SPML 2.0 の使用この章では、Identity Manager 8.0 でサポートされる SPML 2.0 について説明しています。これには、サポートされる機能とその理由、SPML 2.0 サポートの設定方法、フィールドでのサポートの拡張方法が含まれます。
注
この章では、SPML 2.0 のみを扱います。特に明記されていないかぎり、この章での SPML への参照はすべて version 2.0 を示しています。
SPML の使用方法について、役立つ情報が含まれている、第 4 章「Identity Manager Web サービスでの SPML 1.0 の使用」も読まれることをお勧めします。
この情報は、次のように構成されています。
開始する前にIdentity Manager Web サービスの操作を開始する前に、以下の節を確認してください。
対象読者
この章は、アプリケーション開発者および Identity Manager の配備、手続き型ロジックの実装、SPML 2.0 クラスを使用したサービスプロビジョニング要求メッセージのフォーマットや応答メッセージの解析などを担当する開発者を対象としています。
重要な注意点
SPML 2.0 を操作する前に、次の事柄に注意する必要があります。
- Identity Manager Web サービスインタフェースの操作で最高のパフォーマンスを得るには、Identity Manager に同梱されている OpenSPML ツールキットを使用してください。 http://www.openspml.org/ Web サイトにある openspml.jar ファイルを使用すると、メモリーリークが発生する可能性があります。
- SPML 2.0 を実装するときは、スキーマに spml2ObjectClass 属性を追加するように設定を変更する必要があります。以前のリリースで提供された objectclass 属性値は、現在 spml2ObjectClass 属性として維持されています。
- SPML 2.0 を使用して Identity Manager Service Provider (サービスプロバイダ) 機能にアクセスすることはできません。これらの機能は、SPML version 1.0 で使用できます。
関連ドキュメントと Web サイト
SPML の使用方法に関する詳細については、この章で提供される情報のほかに、この節で示すマニュアルおよび Web サイトを参照してください。
推奨ドキュメント
SPML version 1.0 の使用方法の詳細については、本書の第 4 章「Identity Manager Web サービスでの SPML 1.0 の使用」を参照してください。
有用な Web サイト
OpenSPML の使用方法を参照したり、SPML 2.0 仕様を読んだり、OpenSPML 2.0 Toolkit をダウンロードしたりするには、次の Web サイトにアクセスしてください。
概要この節では、SPML 2.0 に関する以下の一部の基本的な概念について説明します。
SPML 2.0 と SPML 1.0 の比較
Identity Manager の Web サービスは、プロビジョニングシステムとの通信のために、XML を使用したサービスプロビジョニングのためのオープンな標準規格である SPML version 1.0 および version 2.0 の両方のプロトコルをサポートします。
注
Identity Manager での SPML version 1.0 の使用方法の詳細は、第 4 章「Identity Manager Web サービスでの SPML 1.0 の使用」を参照してください。
SPML 2.0 は SPML 1.0 と比較して、次を含む、多くの点が改善されています。
- SPML 2.0 では、ユーザーが機能を拡張し、将来新しい機能を追加できるようにする追加の機能 (表 5-1 を参照) が用意されています。
SPML 2.0 の概念の Identity Manager へのマッピング
SPML 2.0 では、プロビジョニングシステムによって管理されるオブジェクトを説明するために、独自の用語が使用されています。
注
OpenSPML 2.0 仕様 (http://www.openspml.org/) を参照してください。
この節では、次の SPML 2.0 の概念が Identity Manager にどのようにマップされるかについて説明します。
ターゲット
ターゲットは、サーバー内の論理終端です。各ターゲットには名前が付けられ、そのターゲットが管理するオブジェクト (次の「PSO」を参照) のスキーマを宣言します。ターゲットはサポートされる機能 (要求のセット) も宣言します。
現時点で、Identity Manager では 1 つのターゲットのみがサポートされており、複数のターゲットを宣言することはできません。このターゲットには任意の名前を付けることができますが、データオブジェクトの形式は DSML プロファイルに適合している必要があります。
サポートされるターゲットは、spml2.xml ファイル (Configuration:SPML2 オブジェクト) で定義されているターゲットです。たとえば、コード例 5-6 で、ListTargetResponse は 1 つのターゲット spml2-DSML-Target を返します。
PSO
前の項で説明したように、ターゲットは PSO を管理します。PSO (プロビジョニングサービスオブジェクト) は Identity Manager のビューに似ていますが、動作を持っていません。つまり、PSO は Identity Manager のビュー (特にユーザービュー) のデータ部分として考えることができます。
Identity Manager の目的として、PSO は、フォームを介してユーザービューとの間でマップされる属性のコレクションになります。各オブジェクトは objectclass 属性を指定します。この属性は、ターゲットに対して定義されるスキーマ内の objectclass 定義に、オブジェクトをマップするために使用されます。次に、この属性は、次のフォームを検索するために使用されます。
PSOIdentifier
SPML には、PsoID と呼ばれるオブジェクト ID が存在します。
OASIS SPML 2.0 仕様は、PSOIdentifiers (PsoID) を要求元 (クライアント) から隠すことを推奨しています。このため、Identity Manager は、システムに PSO を追加するときに、PsoID としてリポジトリ ID (repoID) を使用します。
repoID は識別用の ID であり、ユーザーに対する提示は想定されていません。要求元がユーザーに PSO を表示するとき、要求元はオブジェクトの ID を提示する目的で、同等の waveset.accountid (または、Identity テンプレート内で属性が使用されているもの) を使用するようにします。
ModifyRequest などで) PSO を識別するとき、要求元は waveset.accountId ではなく repoID を使用するようにします。要求元は waveset.accountId を PSOIdentifier として使用することもできますが、推奨されていません。この属性は将来のリリースで変更される可能性があります。要求元は PsoID の不透明性を、できるかぎり維持することが推奨されます。
PSO では、objectclass 属性を使用してオブジェクトタイプを指定します。Identity Manager では、要求が行われたときに、この属性が存在しない場合、SPMLUser などの「デフォルト」objectclass を指定し、使用することができます。内部的には、objectclass の値はユーザー用に spml2ObjectClass 属性として維持されます。Identity Manager では、この属性はユーザー拡張属性である必要があります。SPML 2.0 を有効にする以前から存在していたユーザーについては、spml2ObjectClass 属性を見つけられない可能性があります。
オープンコンテンツとオペレーショナル属性
SPML の .xsd ファイルでは、仕様の中でオープンコンテンツとして定義されている要素を識別するために、xsd:any が頻繁に使用されています。SPML でのオープンコンテンツとは、ほとんどの要素が任意のタイプの要素を含むことができるという意味です。Identity Manager ではこの概念を利用して、処理を制御する OperationalNVPs (NameValuePairs) および OperationalAttributes を提供しています。OperationalNVPs は XML 内の要素として出現する一方で、オペレーショナル属性は属性として出現します。詳細は、OpenSPML 2.0 Toolkit (http://www.openspml.org) を参照してください。
OperationalNVPs およびオペレーショナル属性については、「サポートされる SPML 2.0 の機能」の節で詳しく説明します。ただし、ListTargets を除くすべての要求およびすべての応答で、使用する NVP は 1 つです。Identity Manager は、session という OperationalNVP に sessionToken を格納します。これにより、システムはユーザーの代わりに自動的にセッションをキャッシュして、処理効率を改善できます。
サポートされる SPML 2.0 の機能
Identity Manager は DSML プロファイルを使用して、SPML 2.0 仕様のすべてのコア機能をサポートします。Identity Manager は、Batch や Async などの一部のオプション標準機能もサポートし、Bulk などの一部の標準機能については部分的にサポートします。
この節では、Identity Manager でサポートされている SPML 2.0 の機能、Identity Manager で意図的に加えられた仕様およびプロファイル文書との相違点、および、Identity Manager で必須のオペレーショナル属性について説明します。
この情報は次の各節で構成されています。
コア機能
Identity Manager は、次のコア機能をサポートしています。
AddRequest および ListTargetRequest の例を次に示します。
AddRequest の例
ここでは、AddRequest の例をいくつか示します。
次の例は、Identity Manager の SessionAwareSpml2Client クラスを通して ListTargetsRequest を呼び出す .jsp です。
コード例 5-2 は、送信される SPML 2.0 の要求を示します。
コード例 5-2 要求 XML の例
<addRequest xmlns='urn:oasis:names:tc:SPML:2:0' requestID='rid-spmlv2' executionMode='synchronous'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml' name='session' value='AAALPgAAYD0A...'/>
<data>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='accountId'>
<dsml:value>exampleSpml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='objectclass'>
<dsml:value>spml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='credentials'>
<dsml:value>pwdpwd</dsml:value>
</dsml:attr>
</data>
</addRequest>
コード例 5-3 は、クライアントに返される SPML 要求の本体を示します。
コード例 5-3 応答 XML の例
<addResponse xmlns='urn:oasis:names:tc:SPML:2:0' status='success' requestID='rid-spmlv2'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml' name='session' value='AAALPgAAYD0A...'/>
<pso>
<psoID ID='anSpml2Person'/>
<data>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='accountId'>
<dsml:value>anSpml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='objectclass'>
<dsml:value>spml2Person</dsml:value>
</dsml:attr>
<dsml:attr xmlns:dsml='urn:oasis:names:tc:DSML:2:0:core' name='credentials'>
<dsml:value>pwdpwd</dsml:value>
</dsml:attr>
</data>
</pso>
</addResponse>
ListTargetsRequest の例
次の例は、Identity Manager を介して利用可能な ListsTargetRequest を示します。
コード例 5-4 は、Identity Manager の SessionAwareSpml2Client クラスを通して ListTargetsRequest を呼び出す .jsp を示します。
コード例 5-4 クライアントコードの例
<%@page contentType="text/html"%>
<%@page import="org.openspml.v2.client.*,
com.sun.idm.rpc.spml2.SessionAwareSpml2Client"%>
<%@page import="org.openspml.v2.profiles.dsml.*"%>
<%@page import="org.openspml.v2.profiles.*"%>
<%@page import="org.openspml.v2.util.xml.*"%>
<%@page import="org.openspml.v2.msg.*"%>
<%@page import="org.openspml.v2.msg.spml.*"%>
<%@page import="org.openspml.v2.util.*"%>
<%
final String url = "http://host:port/idm/servlet/openspml2";
%>
<html>
<head><title>SPML2 Test</title></head>
<body>
<%
// クライアントが必要。
SessionAwareSpml2Client client = new SessionAwareSpml2Client( url );
// ログイン (ListTargetsRequest を送信する)
Response res = client.login("configurator", "password");
%>
<%= res.toString()%>
</body>
</html>
コード例 5-5 は、送信される SPML 要求の本体を示します。
コード例 5-5 要求 XML の例
<listTargetsRequest xmlns='urn:oasis:names:tc:SPML:2:0' requestID='rid[7013]' executionMode='synchronous'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml' name='accountId' value='configurator'/>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml' name='password' value='password'/>
</listTargetsRequest>
コード例 5-6 は、クライアントが受信する (クライアントに返される) SPML 要求の本体を示します。
コード例 5-6 応答 XML の例
<listTargetsResponse xmlns='urn:oasis:names:tc:SPML:2:0' status='success' requestID='rid[6843]'>
<openspml:operationalNameValuePair xmlns:openspml='urn:org:openspml:v2:util:xml'
name='session' value='AAALPgAAYD0A...'/><target targetID='spml2-DSML-Target' profile='urn:oasis:names:tc:SPML:2:0:DSML'>
<スキーマ>
<spmldsml:schema xmlns:spmldsml='urn:oasis:names:tc:SPML:2:0:DSML'>
<spmldsml:objectClassDefinition name='spml2Person'>
<spmldsml:memberAttributes>
<spmldsml:attributeDefinitionReference required='true' name='objectclass'/>
<spmldsml:attributeDefinitionReference required='true' name='accountId'/>
<spmldsml:attributeDefinitionReference required='true' name='credentials'/>
<spmldsml:attributeDefinitionReference name='firstname'/>
<spmldsml:attributeDefinitionReference name='lastname'/>
<spmldsml:attributeDefinitionReference name='emailAddress'/>
</spmldsml:memberAttributes>
</spmldsml:objectClassDefinition>
<spmldsml:attributeDefinition name='objectclass'/>
<spmldsml:attributeDefinition description='Account Id' name='accountId'/>
<spmldsml:attributeDefinition description='Credentials, e.g. password'
name='credentials'/><spmldsml:attributeDefinition description='First Name' name='firstname'/>
<spmldsml:attributeDefinition description='Last Name' name='lastname'/>
<spmldsml:attributeDefinition description='Email Address' name='emailAddress'/>
</spmldsml:schema>
<supportedSchemaEntity entityName='spml2Person'/>
</schema>
<機��yen;>
<capability namespaceURI='urn:oasis:names:tc:SPML:2:0:async'/>
<capability namespaceURI='urn:oasis:names:tc:SPML:2:0:batch'/>
<capability namespaceURI='urn:oasis:names:tc:SPML:2:0:bulk'/>
<capability namespaceURI='urn:oasis:names:tc:SPML:2:0:pass'/>
<capability namespaceURI='urn:oasis:names:tc:SPML:2:0:suspend'/>
</capabilities>
</target>
</listTargetsResponse>
Async 機能
Identity Manager は、表 5-3 で説明した Async 機能をサポートします。
表 5-3 Async 機能
機能
説明
オペレーショナル属性
相違点
CancelRequest
要求 ID を使用して要求をキャンセルします。
なし
StatusRequest
要求 ID を使用して要求のステータスを返します。
なし
Batch 機能
Identity Manager は、表 5-4 で説明した Batch 機能をサポートします。
Bulk 機能
Identity Manager は、表 5-5 で説明した Bulk 機能をサポートします。
表 5-5 Bulk 機能
機能
説明
オペレーショナル属性
相違点
BulkDeleteRequest
PSO の一括削除を実行します。
なし
BulkModifyRequest
一致する PSO の一括変更を実行します。
なし
Password 機能
Identity Manager は、表 5-6 で説明した Password 機能をサポートします。
表 5-6 Password 機能
機能
説明
オペレーショナル属性
相違点
ExpirePasswordRequest
パスワードを失効させます。
なし
ResetPasswordRequest
すべてのアカウントに対してパスワードをリセットし、新しい値を返します。
なし
パスワードは漏洩を防ぐ必要があります。SSL またはその他のセキュリティー保護された伝送手段を使用してください。
SetPasswordRequest
パスワードを設定します。
なし
パスワードは漏洩を防ぐ必要があります。SSL またはその他のセキュリティー保護された伝送手段を使用してください。
ValidatePasswordRequest
指定されたパスワードが有効かどうかを判断します。
なし
パスワードは漏洩を防ぐ必要があります。SSL またはその他のセキュリティー保護された伝送手段を使用してください。
Password 機能の例を次に示します。
ResetPasswordRequest の例
コード例 5-7 は ResetPasswordRequest の例です。
コード例 5-7 ResetPasswordRequest の例
ResetPasswordRequest rpr = new ResetPasswordRequest();
...
PSOIdentifier psoId = new PSOIdentifier(accountId, null, null);
rpr.setPsoID(psoId);
...
SetPasswordRequest の例
コード例 5-8 は SetPasswordRequest の例です。
コード例 5-8 SetPasswordRequest の例
SetPasswordRequest spr = new SetPasswordRequest();
...
PSOIdentifier psoId = new PSOIdentifier(accountId, null, null);
spr.setPsoID(psoId);
spr.setPassword("newpassword");
spr.setCurrentPassword("oldpassword");
...
ValidatePasswordRequest の例
コード例 5-9 は ValidatePasswordRequest の例です。
コード例 5-9 ValidatePasswordRequest の例
ValidatePasswordRequest vpr = new ValidatePasswordRequest();
...
PSOIdentifier psoId = new PSOIdentifier(accountId, null, null);
vpr.setPsoID(psoId);
vpr.setPassword("apassword");
...
Suspend 機能
Identity Manager は、表 5-7 で説明した Suspend 機能をサポートします。
表 5-7 Suspend 機能
機能
説明
オペレーショナル属性
相違点
ResumeRequest
PSO ユーザーを再開 (有効化) します。
なし
EffectiveDate をサポートしません。
EffectiveDate を設定すると、Identity Manager は OperationNotSupported エラーを返します。
SuspendRequest
アカウントや PSO を中断 (無効化) します。
なし
EffectiveDate をサポートしません。
EffectiveDate を設定すると、Identity Manager は OperationNotSupported エラーを返します。
SPML 2.0 を使用するための Identity Manager の設定この節では、SPML 2.0 を Identity Manager で使用するための設定方法について説明します。次のトピックを扱います。
管理する属性の決定
SPML 2.0 を使用するために Identity Manager サーバーを設定するとき、最初に行うことは、ターゲットを通じて管理する属性の決定です。
このインタフェースを使用する Identity Manager インスタンスでユーザーを管理するときに、インタフェースクライアントがどの属性セット (objectclasses) を使用するかを決定します。この属性セットが PSO です。フォームを使用して、それらの属性をユーザービューとの間でマップする方法についても理解する必要があります。
この節では、spml2Person という DSML objectclass に対して、次の属性を含む PSO を使用するシステムの設定方法について説明します。
これらの属性をユーザービューにマップする必要があります。
またこの節では、Identity Manager での SPML 2.0 サポートを使用して、PSO の管理方法を説明する、簡単な例も示します。
Identity Manager は、sample/spml2.xml ファイルで、SPML 設定オブジェクトのサンプルのセットを提供しています。sample/spml2.xml ファイルは、リポジトリの初期化時にデフォルトではインポートされないので、手動でインポートする必要があります。詳細については、このファイルの内容を参照してください。
注
デフォルトでは、spml2ObjectClass 属性は User スキーマに存在しません。この属性がまだ有効になっていない場合、Identity Manager を SPML 2.0 サーバーとして機能させるには、スキーマに spml2ObjectClass 属性を手動で追加する必要があります。
spml2ObjectClass 属性は Identity Manager で提供される schema.xml に定義されていますが、この属性を設定に追加するセクションはコメントアウトされています。本稼働用のスキーマがその元のスキーマから取得されたファイル内にあることを前提として、その元のセクションのコメントを解除し、スキーマファイルをインポートするか、再インポートし、Identity Manager を再起動して SPML 2.0 機能を使用可能にすることができます。
PSO の形式を決定したあとで、次の節で説明するサービスを有効にします。次の節では、web.xml ファイルと、SPML 2.0 で追加された要素について説明しています。
SPML2 設定オブジェクトの設定
sample/spml2.xml ファイルには、SPML 2.0 サポートの初期状態の設定が含まれています。このファイルまたはこのファイルから取得したファイルをインポートして、SPML 2.0 をサポートするために Identity Manager で必要なオブジェクトを定義することができます。
SPML2 設定タイプオブジェクトを使用して、SPML 2.0 サポートの動作の変更やシステムの拡張を行うことができます。
注
拡張に関する詳細については、「システムの拡張」を参照してください。
web.xml の設定
Tomcat などのサーブレットコンテナを使用している場合は、web.xml を使用して、SPML 2.0 要求を処理するサーブレットである openspmlRouter サーブレットを設定します。
web.xml ファイルには、オプションの init-param が含まれています。このパラメータは、SPML 2.0 メッセージのフローを表示する (Swing の) 監視ウィンドウを開くために使用できます。このウィンドウを使用して、SPML 2.0 メッセージのフローを監視できます。これは、デバッグの際に便利です。
init-param の追加方法の例を次に示します。
<init-param>
<param-name>monitor</param-name>
<param-value>org.openspml.v2.util.SwingRPCRouterMonitor</param-value>
</init-param>
次の例は、コメント付きのセクションで、その他の init-params についての情報が含まれています。
コード例 5-10 コメント付きの例
<servlet>
<servlet-name>openspmlRouter</servlet-name>
<display-name>OpenSPML SOAP Router</display-name>
<description>A router of RPC traffic - nominally SPML 2.0 over SOAP</description>
<servlet-class>
org.openspml.v2.transport.RPCRouterServlet
</servlet-class>
<!--
Router はディスパッチャーを使用して SOAP メッセージを処理する。これは、ツールキット内の
SOAP に対応した対応したディスパッチャーである。命名規則を介した独自のパラメータを持つ。
次を参照。-->
<init-param>
<param-name>dispatchers</param-name>
<param-value>org.openspml.v2.transport.SPMLViaSoapDispatcher</param-value>
</init-param>
<!--
トレースを有効にし、サーブレットが情報メッセージをログに書き込むようにする。
-->
<init-param>
<param-name>trace</param-name>
<param-value>false</param-value>
</init-param>
<!--
先に定義した SpmlViaSOAPDispatcher は整列化処理 (Marshaller) を使用する。XML および SPML の
オブジェクト間で移動を行うためのチェーンが存在する可能性がある。この目的のために実装した
UberMarshaller を使用する。これは実際にはツールキットのクラスを変換したものである。-->
<init-param>
<param-name>SpmlViaSoap.spmlMarshallers</param-name>
<param-value>com.sun.idm.rpc.spml2.UberMarshaller</param-value>
</init-param>
<!--
ここで使用する UberMarshaller は独自のトレース設定を持つ。
このリリースでは、この設定は実際には何も行わない。-->
<init-param>
<param-name>SpmlViaSoap.spmlMarshallers.UberMarshaller.trace</param-name>
<param-value>true</param-value>
</init-param>
<!--
最後に、ディスパッチャーは機能を実際に
実装する executor のリストを持つ。要求を受け取ると、
SOAP エンベロープを除去し、XML から本体を抽出して OpenSPML Request クラスに渡し、要求を処理できるか
どうかを executor のリストに問い合わせる。ここでは UberExecutor を定義した。
この executor は要求をほかの executor に再振り分けする。ほかの executor は spml2.xml (Configuration:SPML2) で指定される。-->
<init-param>
<param-name>SpmlViaSoap.spmlExecutors</param-name>
<param-value>com.sun.idm.rpc.spml2.UberExecutor</param-value>
</init-param>
</servlet>
SPML トレースの設定
Identity Manager の SPML トラフィックをロギングし、問題の診断に役立てることができるように、SPML では、トレース出力を有効にするためのオプションが提供されています。
SPML のトレースの詳細については、『Identity Manager Tuning, Troubleshooting, and Error Messages』の「Tracing and Troubleshooting Identity Manager」の章を参照してください。
システムの拡張設定オブジェクトを変更することによって、スキーマを拡張します。セクションを変更することにより、要求の executor を追加できます。フォームを使用して、DSML とビューの間でマッピングを行うことができます。
少し難しくなりますが、ディスパッチャー、整列化クラス、および UberExecutor を、カスタマイズしたものと置き換えることもできます。
SPML 2.0 は広く開かれたプラグイン可能性を提供しており、これは Identity Manager で OpenSPML 2.0 Toolkit を利用することによって実現されています。次の図は、OpenSPML 2.0 Toolkit のアーキテクチャーを示しています。
図 5-1 OpenSPML 2.0 Toolkit のアーキテクチャー
SPML 2.0 アダプタの例Identity Manager には、サンプルの SPML 2.0 リソースアダプタが用意されています。このアダプタを出発点として使用し、内容を変更して、Identity Manager インストールや、SPML 2.0 コア操作をサポートするサードパーティーのリソースと通信することができます。