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を開き、 com.okta.scim.server.example.SCIMServiceImplを、SCIMInterface を実装するために作成したクラスに変更します。
- mvn verifyコマンドを実行します。
- Tomcat で .war ファイルを実行し、scim-sdk-testsツールを使用して検証します。
Javadoc
Javadocは、SCIMコネクターを構築するための主要な技術リソースです。
コード例
「Store.java」というファイルは、SDKとの統合方法を示す例です。このクラスは、高性能、簡潔、完全ではありません。SDKのデータモデルをどのように扱うかを示しています。StoreのJavadocには詳細な技術情報が含まれており、コードの主なリソースとなっています。
SCIMInterfaceのメソッド
SCIMInterfaceでは、コネクターを構築するために以下の方法が用意されています。詳細については、Javadocまたは SCIMService.java ファイル内のコメントを参照してください。
メソッド | 用途 |
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コネクターをテストする