SDKを使ってオンプレミスプロビジョニングのSCIMコネクターを作成する
Okta Provisioning Agentは、企業のファイアウォールの背後にインストールされているオンプレミスアプリケーションにOktaからユーザーをプロビジョニングしたり、企業のアプリケーションからOkta orgにユーザーをインポートしたりすることができます。Oktaとオンプレミスアプリケーションの間の通信は、Okta Provisioning AgentとSCIMサーバー、またはProvisioning Connector SDKを使用して構築されたプロビジョニングコネクターを介して行われます。
ここに記載されている情報に基づいてProvisioning Connector SDKを使用したオンプレミスプロビジョニング用にカスタマイズされたSCIMコネクターを構築してください。この情報は、「オンプレミスプロビジョニングのSCIMコネクターを作成する」に記載されている、SCIMコネクターの作成とテスト、およびサンプルコードの修正に関する説明を補足するものです。
ビルドプロセス
以下の手順でSCIMの実装を開発します。コーディングとテストの大部分は、手順7~8で行われます。
- scim-server-exampleディレクトリを任意の場所にコピーします。残りの手順は、新しいディレクトリの中で行います。
- src/main/java/comディレクトリを削除してStoreの実装を削除します。
- src/test/java/comディレクトリを削除してStoreの実装テストを削除します。
- IDEを開いてpom.xmlを編集し、必要に応じてgroupIdとartifactIdの名前を変更します。
- MANIFEST.MFファイルを編集し、必要に応じて名前を変更します。
- com.okta.scim.server.service.SCIMServiceインターフェイスを実装した独自のクラス(コネクター)を追加します。
- 新しいコネクターのテストを作成し、追加します。
- webapps/WEB-INF/dispatcher-servlet.xmlを開き、SCIMInterfaceの実装用に作成したクラスにcom.okta.scim.server.example.SCIMServiceImplを変更します。
- mvn verifyコマンドを実行します。
- Tomcatで.warファイルを実行し、scim-sdk-testsツールを使用して検証します。
Javadoc
Javadocは、SCIMコネクターを構築するための主要な技術リソースです。
コード例
「Store.java」というファイルは、SDKとの統合方法を示す例です。このクラスは、高性能、簡潔、完全なものではありません。SDKのデータモデルをどのように扱うかを示しています。StoreのJavadocには詳細な技術情報が含まれており、コードの主なリソースとなっています。
SCIMInterfaceのメソッド
SCIMInterfaceでは、コネクターの構築に使用できる以下の方法が用意されています。詳細については、JavadocまたはSCIMService.javaファイル内のコメントを参照してください。
[Method(方式)] | 用途 |
createGroup(SCIMGroup group) | グループを作成します。SCIMグループのすべての標準的な属性は、SCIMGroupオブジェクトのGroupResourceメンバーのゲッターを使って取得することができます。SCIMGroupの入力にカスタムスキーマがある場合は、カスタムプロパティの名前を指定することでカスタムスキーマを取得することができます。(例:SCIMGroup.getStringCustomProperty("schemaName", "customFieldName"))のように、プロパティが文字列タイプである場合。このメソッドは、作成するグループを表すSCIMペイロードを含むPOSTが/Groupsに行われたときに呼び出されます。注:このメソッドを実装するには、getGroupsメソッドも実装する必要があります。 |
createUser(SCIMUser user) | ユーザーを作成します。SCIMUserオブジェクトのUserResourceメンバーのゲッターを使用することで、SCIM Userのすべての標準属性を取得できます。SCIMUserの入力にカスタムスキーマがある場合は、カスタムプロパティの名前を指定することで、カスタムスキーマを取得することができます。(例:SCIMUser.getStringCustomProperty("schemaName", "customFieldName"))のように、プロパティが文字列タイプの場合。このメソッドは、作成するユーザーを表すSCIMペイロードを持つPOSTが/Usersに行われたときに呼び出されます。 |
deleteGroup(java.lang.String id) | 特定のグループを削除します。このメソッドは、/Groups/{id}に対してDELETEが行われたときに呼び出されます。 |
getGroup(java.lang.String id) | 特定のグループを取得します。このメソッドは、/Groups/{id}に対してGETが行われたときに呼び出されます。 |
getGroups(PaginationProperties pageProperties) | すべてのグループを取得します。このメソッドは、/Groupsに対してGETが行われたときに呼び出されます。ページネーションをサポートする上で(クライアントとサーバーが)負担にならないように、このメソッドは、開始インデックスとクライアントが期待する最大数の結果に基づくクエリの実行をサポートします。SCIMグループのインデックスを維持するのは実装側の責任です。 |
getImplementedUserManagementCapabilities() | このSCIMサービスに実装されているすべてのユーザー管理機能を取得します。 |
getUser(java.lang.String id) | 特定のユーザーを取得します。このメソッドは、/Users/{id}に対してGETが行われたときに呼び出されます。 |
getUsers(PaginationProperties pageProperties, SCIMFilter filter) | すべてのユーザーを取得します。このメソッドは、ページネーションをサポートするためと、/Usersに対してGETが行われたときに呼び出されます(クライアントとサーバーに負担をかけないため)。このメソッドは、開始インデックスとクライアントが要求する最大数の結果に基づくクエリの実行をサポートします。SCIMユーザーのインデックスを維持するのは実装側の責任です。このメソッドは、フィルターに基づいたクエリの実行にも対応しています。このメソッドは、フィルターに基づいたクエリの実行にも対応しています。増分インポートがサポートされている場合、このメソッドはmeta.lastModified属性に基づくフィルターをサポートする必要があります。 |
updateGroup(java.lang.String id, SCIMGroup group) | グループを更新します。このメソッドは、更新するグループのSCIMペイロードを持つPUTが/Groups/{id}に対して行われたときに呼び出されます。 |
updateUser(java.lang.String id, SCIMUser user) | ユーザーを更新します。このメソッドは、更新するユーザーのSCIMペイロードを持つPUTが/Users/{id}に対して行われたときに呼び出されます。 |
例外
SCIMInterfaceのメソッドからは、以下のような例外が発生します。
EntityNotFoundException | /Usersや/Groupsに対してupdate、delete、get requestを受けたが、そのIDのリソースが見つからない場合。 |
DuplicateGroupException | グループの作成リクエストを受信したが、重複したグループが存在する場合。 |
OnPremUserManagementException | その他、定義した例外的な条件がある場合。 |
EntityNotFoundExceptionとDuplicateGroupExceptionについては、SDKがエラーコードとメッセージを自動的に例外に関連付けます。
OnPremUserManagementExceptionについては、以下の4つの異なるプロパティのいずれかで例外を作成することができます。
- 内部コード:例外に関連付ける任意のコード。
- 説明:例外の説明。
- ヘルパーURL:問題解決に役立つ参照用URLがある場合。
- 例外:関連するすべての例外。
注:UM操作の処理中、コードに例外が発生した場合、その例外は以下のようにOkta UIで見えるようにjson文字列にシリアライズされます。これは上記のすべての例外に当てはまります。
"Failed on 11-24-2013 11:15:25PM UTC: Unable to delete Group Push mapping target App group ogroup-1: Error while deleting user group ogroup-1: The Provisioning Agent call to deleteGroup failed. Error code: 404, error: Not Found. Errors reported by the connector : {"errors":[{"statusCode":404,"internalCode":"E0000048","description":"Cannot delete the group - Cannot find the group with the id [1004]","help_url":null}]}"
次の手順
オンプレミスプロビジョニングのSCIMコネクターをテストする