Sun Java ロゴ     前へ      目次      索引      次へ     

Sun ロゴ
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 Web サービスの操作を開始する前に、以下の節を確認してください。

対象読者

この章は、アプリケーション開発者および Identity Manager の配備、手続き型ロジックの実装、SPML 1.0 クラスを使用したサービスプロビジョニング要求メッセージのフォーマットや応答メッセージの解析などを担当する開発者を対象としています。

重要な注意点

SPML 1.0 を操作する前に、次の事柄に注意する必要があります。

関連ドキュメントと Web サイト

SPML の使用方法に関する詳細については、この章で提供する情報に加えて、この節で示すマニュアルおよび Web サイトも参照してください。

推奨ドキュメント

SPML version 2.0 の使用方法の詳細については、本書の第 5 章「Identity Manager Web サービスでの SPML 2.0 の使用」を参照してください。

有用な Web サイト

OpenSPML の使用方法の詳細について参照したり、OpenSPML 1.0 Toolkit をダウンロードしたりするには、次の Web サイトにアクセスしてください。

http://www.openspml.org


SPML の設定

SPML インタフェースを公開するには、特定のリポジトリオブジェクトをインストールおよび変更し、Waveset.properties ファイルを編集することにより、Identity Manager サーバーを正しく設定する必要があります。

SPML インタフェースを設定する手順については、次の節で説明します。

リポジトリオブジェクトのインストールと変更

次の表は、Identity Manager の SPML を設定するためにインストールして変更する必要のあるリポジトリオブジェクトを示しています。

表 4-1 SPML の設定に使用されるリポジトリオブジェクト  

Object

説明

Configuration:SPML

サーバーでサポートされている SPML スキーマの定義、および SPML スキーマと内部のビューモデルの間の変換のための規則が含まれています。各 SPML スキーマには一般に、関連付けられたフォームがあります。

SPML フォーム

SPML スキーマで定義された外部のモデルと、Identity Manager ビューで定義された内部のモデルの間で、変換の規則をカプセル化する 1 つ以上のフォームオブジェクトが含まれています。一般に、SPML スキーマで定義されたオブジェクトクラスごとに、1 つの SPML フォームを定義します。

Configuration:IDM Schema Configuration

SPML フィルタを介したアクセスのために Identity Manager リポジトリ内に格納でき、Identity Manager ユーザーオブジェクトのクエリー可能かつ概要の属性であるユーザー属性を定義します。

  • SPML フィルタで使用する属性に対して、クエリー可能な属性を定義します。
  • 最適化された検索で返す属性に対して、概要の属性を定義します。

TaskDefinition:SPMLRequest

非同期 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

各表記の意味は次のとおりです。

Waveset.properties ファイルの編集

次の表は、SPML 要求の承認方法を制御するために使用できる、Waveset.properties ファイル内の 3 つのオプションのエントリを示しています。

表 4-2 Waveset.properties 内のオプションのエントリ

エントリ名

説明

soap.username

SPML 要求を実行するための実効ユーザーとして使用される Identity Manager ユーザーの名前

soap.password

soap.username で指定されたユーザーのクリアテキストのパスワード。

soap.epassword

soap.username で指定されたユーザーの暗号化パスワードの base 64 表現。

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 インタフェースは、認証と承認をサポートしませんが、Identity Manager SPML インタフェースで、サービスプロバイダ SPML の代わりに IDMXUser ビューを使用するよう設定することができます。

サービスプロバイダ では、Identity Manager にアクセスしているクライアントはすでにアクセス管理アプリケーションによって認証および承認済みであることを前提にしています。サービスプロバイダ SPML インタフェースを使用するときには、クライアントはすべての可能な権限を持っています。

クライアントと Identity Manager の間で機密データが露呈されることを防ぐために、SSL を使用して サービスプロバイダ SPML インタフェースにアクセスすることを検討してみてください。


暗号化パスワードの作成

暗号化パスワードを作成するには、次のいずれかの方法を使用します。

設定オブジェクトの編集

アプリケーションには、SPML メッセージを送信したり、SPML 応答を受信したりするためのメカニズムが必要です。

Identity Manager で SPML を設定するには、次の設定オブジェクトを設定する必要があります。

Configuration:SPML オブジェクト

SPML オブジェクトには、公開する SPML スキーマの定義と、これらの SPML スキーマが Identity Manager ビューにマップされる方法に関する情報が含まれています。この情報は、設定オブジェクトの拡張として格納されている GenericObject を使用して表されます。

次の属性は、GenericObjectschemas、および classes で定義されます。

当初は、この 2 つのリストの区別がわかりにくいかもしれません。schemas リストに関する情報は、Identity Manager が SPML SchemaRequest メッセージに応答して何を返すかを定義します。クライアントがこの情報を使用すると、AddRequest などの、ほかのメッセージに含まれている可能性のある属性を理解できます。Identity Manager は、schemas リストの内容には関知しません。このリストは、単純にそのままクライアントに返されます。

SPML スキーマの定義は必須ではありません。Identity Manager は、スキーマがなくても機能します。SPML スキーマを定義していない場合、Identity Manager は、スキーマ要求メッセージを受信したあとに、空の応答を返します。スキーマがない場合、クライアントは、サポートされているクラスや属性についての既存の知識に依存する必要があります。

艀11 ベストプラクティス:

SPML スキーマの記述はベストプラクティスと見なされるので、汎用のツール (OpenSPML ブラウザなど) を使用して要求を作成できます。

デフォルトの SPML 設定

次の例は、デフォルトの SPML 設定を示しています。簡潔にするために、SPML スキーマ定義のテキストは省略しています。

コード例 4-1 デフォルトの SPML 設定 

<Configuration name='SPML' authType='SPML'>

<Extension>

<Object>

  <Attribute name='classes'>

    <List>

      <Object name='person'>

        <Attribute name='type' value='User'/>

        <Attribute name='form' value='SPMLPerson'/>

        <Attribute name='default' value='true'/>

        <Attribute name='identifier' value='uid'/>

      </Object>

      <!-- 'user' クラスはフォームを定義しないので、組み込み型の簡素化されたスキーマをデフォルトに設 定する。この処理は実際には好ましくないが、現在 SimpleRpc がこれに依存している。

      -->

      <Object name='user'>

        <Attribute name='type' value='User'/>

        <Attribute name='identifier' value='waveset.accountId'/>

      </Object>

      <!-- 'userview' クラスは、未変更のビューを渡す "view" フォームを定義する

      -->

      <Object name='userview'>

        <Attribute name='type' value='User'/>

        <Attribute name='form' value='view'/>

        <Attribute name='identifier' value='waveset.accountId'/>

        <Attribute name='multiValuedAttributes'>

          <List>

            <String>waveset.resources</String>

            <String>waveset.roles</String>

            <String>waveset.applications</String>

          </List>

        </Attribute>

      </Object>

      <Object name='role'>

        <Attribute name='type' value='Role'/>

        <Attribute name='form' value='SPMLRole'/>

        <Attribute name='default' value='true'/>

        <Attribute name='identifier' value='name'/> <!--  属性 ...暫定的に ? -->

      </Object>

</Configuration>

</Waveset>

この例では、次の 2 つのクラスが定義されています。

クラス定義では、次の属性がサポートされています。

デフォルトのスキーマ

schemas 属性には、SPML <schema> 要素のエスケープされた XML を含む文字列のリストが含まれています。spml.xml ファイルを調べてみると、schema 要素が、CDATA でマークされたセクションで囲まれていることに気付きます。XML の長い文字列のエスケープには、CDATA でマークされたセクションを使用する方が便利です。Identity Manager が spml.xml ファイルを正規化すると、CDATA でマークされたセクションは &lt; および &gt; 文字エンティティーを含む文字列に変換されます。

デフォルト設定には、次の 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>


SPML クラスのフォーム

  • <Display> 要素を含まない
  • データ変換のためにのみ定義される
  • 対話型編集としては使用されない

クラス定義内の属性ごとに、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 の実装では、返される属性のリストを検索要求で明示的に指定しない場合は、概要の属性が返されます。

次の例では、firstnamelastnamefullnamedescription、および telephoneIDMAttributeConfigurations で定義されたあとにユーザーの IDMObjectClassConfiguration に存在する拡張属性です。firstnamelastname、および telephone のみがクエリー可能かつ概要の属性です。

コード例 4-3 拡張属性として宣言された telephonedescription  

<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 フォームによって snlastname にマップされるため、拡張属性を 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 秒になります。

負の場合、その要求インスタンスは自動的には削除されません。


ヒント

リポジトリが乱雑にならないように、resultLimit の値はできるだけ短時間に設定してください。



サービスプロバイダ SPML インタフェースは非同期要求をサポートしていません。


配備記述子

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 を介して addRequestmodifyRequest、および searchRequest Web サービスにアクセスできます。

http://<host>:<port>/idm/servlet/rpcrouter2

各表記の意味は次のとおりです。

<servlet-mapping> を定義する必要はありません (ただし、定義することは可能)。このサーブレット宣言の内容を変更しないでください。


SPML ブラウザの起動

OpenSPML Browser アプリケーションを使用して Identity Manager SPML 設定をテストできます。

ブラウザを起動するには、次の手順に従います。

  1. コマンドウィンドウを開きます。
  2. コマンドプロンプトで、次のコマンドを入力します。
  3. lh spml


Identity Manager サーバーへの接続

Identity Manager サーバーに接続するには、次の手順に従います。

  1. OpenSPML ブラウザを開き、「接続」タブを選択します。
  2. 図 4-1 OpenSPML ブラウザの例
    OpenSPML ブラウザの「接続」タブを示す図。

  3. Identity Manager サーバーの URL を入力します。
  4. たとえば、サーバーがローカルマシンのポート 8080 上で実行されている場合、URL は次のようになります。

    http://host:8080/idm/servlet/rpcrouter2


SPML 設定のテストとトラブルシューティング

SPML 設定をテストするには、次の手順に従います。

  1. 「接続」タブを選択し、「テスト」をクリックします。
  2. 接続が成功したことを示すダイアログが表示されます。

  3. 「スキーマ」タブを選択し、「送信」をクリックします。
  4. Identity Manager サーバーでサポートされているスキーマのツリー表示が表示されます。

正常な接続を確立できない場合は、次の操作を行います。


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.setUserclient.setPassword への 2 つの追加のメソッド呼び出しを使用している点です。たとえば、この例を使用して、Waveset.properties 内でのプロキシユーザーの設定を回避できます。この結果、プロキシユーザーの代わりに、指定されたユーザーを反映する監査ログを取得できます。

この例では、要求が送信されたときに、client.setUserclient.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"));

         }

   }



前へ      目次      索引      次へ     


Part No: 820-5455.   Copyright 2008 Sun Microsystems, Inc. All rights reserved.