DocuWareユーザープロビジョニングv3サービスは、SCIM 2.0準拠のREST APIです。Azure Entra ID、Okta、Ping Identity、またはオンプレミスディレクトリ(ユーザープロビジョニング用オンプレミスディレクトリコネクタツールを使用)などの外部IDプロバイダー(IdP)からDocuWareシステムへの自動ユーザープロビジョニングおよびグループ管理を可能にします。
ベースURLとエンドポイント
ベースURLの構造
DocuWare Cloud
https://{your-organization}.docuware.cloud/DocuWare/Services/UserProvisioningService/{externalIdp}/scimDocuWareオンプレミス
http(s)://{your-server-address}/DocuWare/Services/UserProvisioningService/{externalIdp}/scim{externalIdp}には以下の値を指定できます。
azure— Azure Entra ID用okta— Okta用ping— Ping Identity用onpremise— オンプレミスディレクトリ用generic-{identifier}— 汎用IDプロバイダー用
利用可能なエンドポイント
リソース | HTTPメソッド | エンドポイント | 説明 |
ユーザー | GET |
| userNameまたはexternalIdによるフィルタリングが可能な、すべての外部ユーザーの取得 |
GET |
| userNameまたはexternalIdによるフィルタリングが可能な、すべてのユーザーの取得 | |
GET |
| IDによる特定ユーザーの取得 | |
POST |
| 新規ユーザーの作成 | |
PUT |
| ユーザーの完全な置換 | |
PATCH |
| ユーザーの部分更新 | |
DELETE |
| ユーザーの削除 | |
グループ | GET |
| displayNameによるフィルタリングが可能な、すべてのグループの取得 |
GET |
| IDによる特定グループの取得 | |
POST |
| 新規グループの作成 | |
PUT |
| グループの完全な置換 | |
PATCH |
| グループの部分更新 | |
DELETE |
| グループの削除 | |
スキーマ | GET |
| SCIMスキーマの取得 |
リソースタイプ | GET |
| サポートされるリソースタイプの取得 |
ヘルスチェック | GET |
| サービスの可用性チェック |
認証
JWT Bearer認証
すべてのエンドポイント(ヘルスチェックを除く)では、JWT Bearerトークン認証が必要です。
Authorization: Bearer {jwt-token}Content Type
すべてのリクエストでSCIMコンテンツタイプを使用する必要があります。
Content-Type: application/scim+jsonユーザー管理
ユーザースキーマ(Core2EnterpriseUser)
ユーザーの取得(GET)
GET Usersエンドポイントは、オプションのフィルタリングとページネーションを使用してユーザーデータを取得する複数のバリエーションをサポートしています。デフォルトでは、外部IDを持つユーザー(外部IDプロバイダーからのユーザー)のみが返されます。
1. すべての外部ユーザーの取得(デフォルト)
GET /{externalIdp}/scim/Users
Authorization: Bearer {token}externalIdを持つすべてのユーザー(外部IDプロバイダーからのユーザー)を返します。
レスポンス:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 2,
"itemsPerPage": 2,
"startIndex": 1,
"resources": [
{
"userName": "john.doe",
"active": true,
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Doe"
},
"id": "external-user-id-123",
"meta": {
"resourceType": "User"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
],
},
{
"userName": "jane.smith",
"active": true,
"emails": [
{
"value": "jane.smith@example.com",
"primary": true
}
],
"name": {
"givenName": "Jane",
"familyName": "Smith"
},
"id": "external-user-id-456",
"meta": {
"resourceType": "User"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
]
}
]
}2. すべてのDocuWareユーザーの取得
GET /{externalIdp}/scim/Users?allDocuWareUsers=true
Authorization: Bearer {token}外部ユーザーと内部DocuWareユーザーの両方を含む、DocuWareシステム内のすべてのユーザーを返します。
注意:内部ユーザーにはIDがありません
内部ユーザーはレスポンスに
idを持ちません。これは、内部ユーザーが外部ユーザーではなく、idとして返されるexternalId属性が設定されていないためです。
レスポンス
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 2,
"itemsPerPage": 2,
"startIndex": 1,
"resources": [
{
"userName": "john.doe",
"active": true,
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Doe"
},
"id": "external-user-id-123",
"meta": {
"resourceType": "User"
},
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
},
{
"userName": "jane.smith",
"active": true,
"emails": [
{
"value": "jane.smith@example.com",
"primary": true
}
],
"name": {
"givenName": "Jane",
"familyName": "Smith"
},
"meta": {
"resourceType": "User"
},
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]
}
]
}3. IDによる特定ユーザーの取得
GET /{externalIdp}/scim/Users/{externalId}
Authorization: Bearer {token}外部IDによる特定ユーザーを返します。
レスポンス:
{
"userName": "john.doe",
"active": true,
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Doe"
},
"id": "external-user-id-123",
"meta": {
"resourceType": "User"
},
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
}4. フィルタリングによるユーザーのクエリ
ユーザー名によるフィルタリング(外部ユーザー内):
GET /{externalIdp}/scim/Users?filter=userName eq "john.doe"
Authorization: Bearer {token}すべてのDocuWareユーザーでのユーザー名によるフィルタリング:
GET /{externalIdp}/scim/Users?allDocuWareUsers=true&filter=userName eq "john.doe"
Authorization: Bearer {token}外部IDによるフィルタリング:
GET /{externalIdp}/scim/Users?filter=externalId eq "external-user-id-123"
Authorization: Bearer {token}ページネーションによるユーザーの取得:
GET /{externalIdp}/scim/Users?startIndex=2&count=5
Authorization: Bearer {token}GET /{externalIdp}/scim/Users?allDocuWareUsers=true&startIndex=2&count=5
Authorization: Bearer {token}サポートされるクエリパラメーター
ページネーション:
startIndex — 最初の結果の1ベースインデックス(デフォルト:1、最小値:1)
count — ページあたりの結果数(未指定の場合はすべての結果がデフォルト、最小値:0)
フィルタリング:
filter — SCIMフィルター式(userName eq "value"およびexternalId eq "value"のみサポート)(大文字小文字を区別しない)
レスポンス形式
すべてのGET /Usersリクエストは、以下の構造のSCIM ListResponseを返します。
プロパティ:
schemas — "urn:ietf:params:scim:api:messages:2.0:ListResponse"を含む配列
totalResults — 一致するユーザーの合計数
itemsPerPage — 現在のレスポンスで返されるユーザー数
startIndex — 現在のページの開始インデックス(1ベース)
Resources — ユーザーオブジェクトの配列
エラーレスポンス
400 Bad Request — 無効なフィルター:
{
"ScimType": "invalidFilter",
"Detail": "Unsupported filter attribute: FirstName",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}{
"ScimType": "invalidFilter",
"Detail": "Unsupported comparison operator: 'ne'",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}すべてのGET /Users/{externalId}リクエストは、以下の構造のUserオブジェクトを返します。
Userオブジェクトのプロパティ:
id— ユーザーの外部IDuserName— ユーザーのログイン名(汎用IdP以外ではメールアドレスの場合ドメインを除く)active— ユーザーの有効ステータス(ブール値)emails— value、primaryプロパティを持つメールオブジェクトの配列name— givenNameとfamilyNameプロパティを持つオブジェクトmeta— resourceType: "User"を持つメタデータオブジェクトschemas— SCIMスキーマ識別子の配列
エラーレスポンス
404 Not Found — ユーザーが見つかりません:
{
"Detail": "User with External ID 'external-user-id-404' was not found.",
"Status": 404,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}例
最初の5人の外部ユーザーを取得:
GET /{externalIdp}/scim/Users?startIndex=1&count=5指定位置からの外部ユーザーの取得:
GET /{externalIdp}/scim/Users?startIndex=10&count=20ユーザー名によるユーザーの検索:
GET /{externalIdp}/scim/Users?filter=userName eq "john.doe"すべてのDocuWareユーザーからユーザー名で検索:
GET /{externalIdp}/scim/Users?allDocuWareUsers=true&filter=userName eq "jane.smith"externalIdによるユーザーの検索:
GET /{externalIdp}/scim/Users?filter=externalId eq "external-user-id-123"ページネーション付きですべてのDocuWareユーザーを取得:
GET /{externalIdp}/scim/Users?allDocuWareUsers=true&startIndex=1&count=50ユーザーの作成(POST)
ユーザー作成の仕組み
システムは、以下の手順に従ったインテリジェントなユーザー作成・更新ロジックを実装しています。
外部IDによるユーザー検索:まず、指定されたexternalIdで既存ユーザーの検索を試みます。見つかった場合は完全一致とみなされ、リクエストの属性で既存ユーザーが更新されます。
ユーザー名によるフォールバック検索:外部IDでユーザーが見つからない場合、
userNameフィールドから抽出されたユーザー名で検索します。見つかり、かつ受信メールが既存ユーザーのメールと一致する場合は完全一致とみなされ、リクエストの属性で既存ユーザーが更新されます。メールが一致しない場合、指定されたuserNameを持つユーザーが既に存在するため、新規ユーザーの作成は失敗します(409 Conflictが返されます)。
ユーザー作成と更新のロジック:
新規ユーザー:
externalIDまたはuserNameで既存ユーザーが見つからない場合、新規ユーザーを作成します。ユーザー更新:
externalIdまたはuserName+メールで既存ユーザーが見つかり一致した場合、ユーザー情報を更新します。メール検証:
userNameで検索する場合、既存ユーザーのメールと指定されたメールの一致を検証します(大文字小文字を区別しない)。メールが一致しない場合、競合を防ぐために例外がスローされます。
メールアドレス解決サービスに関する注意
サービスは以下の優先順位でユーザーのメールアドレスを決定します。
プライマリメール:emails配列でprimary: trueとマークされたメールを使用します。
最初の有効なメール:プライマリメールが存在しない場合、emails配列から最初の有効なメールを選択します。
検証:上記のいずれも有効なメールアドレスでない場合、リクエストは400 Bad Requestで失敗します。
リクエスト
POST /{externalIdp}/scim/Users
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
"userName": "john.doe@example.com",
"externalId": "external-user-id-123",
"active": true,
"name": {
"givenName": "John",
"familyName": "Doe"
},
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
]
}必須フィールドとオプションフィールド
必須フィールド:
schemas— SCIMスキーマ識別子(CoreとEnterprise Userの両方のスキーマを含む必要あり)userName— ユーザーのログイン名(一意である必要あり)externalId— 外部IDプロバイダーのユーザーID(一意である必要あり)active— ユーザーの有効ステータスemails— メールアドレスの配列
オプションフィールド:
name— ユーザーの表示名オブジェクトname.givenName— 名name.familyName— 姓
フィールド検証ルール:
UserName:必須、大文字小文字を区別、空または空白のみは不可
ExternalId:必須、大文字小文字を区別、空または空白のみは不可
Emails:少なくとも1つの有効なメールが解決可能である必要あり(複数の場合はメールアドレス解決ルールが適用)
Active:ブール値
Nameフィールド:表示用のオプション文字列
レスポンス
成功(200 OK):
{
"userName": "john.doe",
"active": true,
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Doe"
},
"id": "external-user-id-123",
"meta": {
"resourceType": "User"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
]
}エラーレスポンス
400 Bad Request — 必須フィールドの欠落:
{
"ScimType": "invalidValue",
"Detail": "Validation failed: UserName: is required",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}409 Conflict — ユーザーが既に存在:
{
"ScimType": "uniqueness",
"Detail": "User with username 'john.doe' already exists with different email address!",
"Status": 409,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}ユーザーの更新(PUT)— ユーザーの完全置換
PUT操作は、ユーザーリソースの完全な置換を行います。指定されたフィールドのみを更新するPATCHとは異なり、PUTは指定されたデータでユーザーオブジェクト全体を置換します。
基本的なPUTリクエスト
PUT /{externalIdp}/scim/Users/{externalId}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"userName": "john.doe",
"externalId": "external-user-id-123",
"active": true,
"emails": [
{
"value": "john.doe@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Doe"
},
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]
}パラメーター
{externalIdp}— 外部IDプロバイダー識別子(azure、okta、ping、onpremiseなど){externalId}— 更新するユーザーの外部ID
PUTの必須フィールド
ユーザー作成に必須のすべてのフィールドを指定する必要があります。
userName— ユーザーのログイン名externalId— 外部IDプロバイダーのユーザーIDactive— ユーザーの有効ステータス(ブール値、未指定の場合はfalseがデフォルト)emails— メールアドレスの配列(メールアドレス解決を参照)schemas— SCIMスキーマ識別子(CoreとEnterprise Userの両方のスキーマを含む必要あり)
オプションフィールド(新しい値が指定されない場合、既存の値が保持されます)
name — ユーザーの表示名オブジェクト
name.givenName — 名
name.familyName — 姓
完全なPUTの例
PUT /azure/scim/Users/external-user-id-123
Content-Type: application/scim+json
Authorization: Bearer {jwt-token}
{
"userName": "john.smith",
"externalId": "external-user-id-123",
"active": false,
"name": {
"givenName": "John",
"familyName": "Smith"
},
"emails": [
{
"value": "john.smith@example.com",
"primary": true
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
]
}レスポンス
成功(200 OK):
{
"userName": "john.smith",
"active": false,
"emails": [
{
"value": "john.smith@example.com",
"primary": true
}
],
"name": {
"givenName": "John",
"familyName": "Smith"
},
"id": "external-user-id-123",
"meta": {
"resourceType": "User"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
]
}エラーレスポンス
400 Bad Request — 必須フィールドの欠落
{
"ScimType": "invalidValue",
"Detail": "Validation failed: UserName: is required",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}404 Not Found — ユーザーが見つかりません:
{
"Detail": "User with External ID 'external-user-id-404' was not found.",
"Status": 404,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}409 Conflict — ユーザー名の重複:
{
"ScimType": "uniqueness",
"Detail": "User with username 'john.doe' already exists!",
"Status": 409,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}409 Conflict — ExternalIdの重複:
{
"ScimType": "uniqueness",
"Detail": "User with External ID 'external-user-id-409' already exists!",
"Status": 409,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}409 Conflict — リソースのロック:
{
"ScimType": "mutability",
"Detail": "The resource with ID 'external-user-id-409' is immutable.",
"Status": 409,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}PUTの検証ルール
POST操作のすべての検証ルールがPUT操作にも適用されます。
UserName:必須、大文字小文字を区別、空または空白のみは不可
ExternalId:必須、大文字小文字を区別、空または空白のみは不可
Active:ブール値(未指定の場合は
falseがデフォルト)Emails:少なくとも1つの有効なメールが解決可能である必要あり(複数の場合はメールアドレス解決ルールが適用)
Nameフィールド:オプションだが、ユーザーエクスペリエンスのために推奨
Schemas:CoreとEnterprise Userの両方のスキーマを含む必要あり
ユーザーのパッチ(PATCH)操作ガイド
PATCH操作では、SCIM 2.0パッチ操作を使用してユーザー属性の部分更新が可能です。サービスは、ユーザー更新のためのreplaceおよびadd操作をサポートしています。
基本的なPATCH構造:
PATCH /{externalIdp}/scim/Users/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "attribute_path",
"value": "new_value"
},
{
"op": "add",
"path": "attribute_path",
"value": "new_value"
}
]
}サポートされる操作
replace— 既存の属性値を更新add— 空または既存の属性値を更新remove— ユーザー操作ではサポートされません
サポートされる属性パス
ユーザーの有効ステータス:
{
"op": "replace",
"path": "active",
"value": "false"
}ユーザー名の更新:
{
"op": "replace",
"path": "userName",
"value": "new.username"
}Nameフィールド:
{
"op": "replace",
"path": "name.givenName",
"value": "NewFirstName"
}{
"op": "replace",
"path": "name.familyName",
"value": "NewLastName"
}メールアドレス:
{
"op": "replace",
"path": "emails",
"value": "new.email@example.com"
}{
"op": "replace",
"path": "emails[primary eq true].value",
"value": "new.email@example.com"
}注意:
emailsパスの両方の構文が有効です
メールアドレスは有効なメール形式である必要があります
外部ID
{
"op": "replace",
"path": "externalId",
"value": "new-external-id-456"
}複数操作の例:
PATCH /{externalIdp}/scim/Users/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "active",
"value": "false"
},
{
"op": "replace",
"path": "name.givenName",
"value": "Jonathan"
},
{
"op": "replace",
"path": "name.familyName",
"value": "Smith"
},
{
"op": "replace",
"path": "emails",
"value": "jonathan.smith@example.com"
}
]
}重要な注意事項:
すべての操作は順番に処理されます
remove操作はサポートされておらず、エラーが返されますメール関連フィールドにはメール検証が実行されます
activeフィールドにはブール文字列値("true"または"false")が必要です無効な属性パスは400 Bad Requestエラーになります
externalIdまたはuserNameが別のユーザーによって既に使用されている場合、競合エラーになります
エラー処理:
400 Bad Request:無効な操作タイプ、サポートされないパス、または検証エラー
404 Not Found:指定されたIDのユーザーが見つかりません
409 Conflict:更新が競合を引き起こす場合(例:ユーザー名やexternalIdの重複)
PATCH操作でサポートされるユーザー属性
userName— ユーザーのログイン名externalId— 外部IDプロバイダーのユーザーIDname.givenName— 名name.familyName— 姓active— ユーザーの有効ステータス(true/false)emails/emails[].value— メールアドレス
ユーザーの削除(DELETE)
DELETE操作は、DocuWareシステムからユーザーをソフトデリートします。この操作はユーザーを無効化します。
基本的なDELETEリクエスト
DELETE /{externalIdp}/scim/Users/{externalId}
Authorization: Bearer {token}パラメーター:
{externalIdp}— 外部IDプロバイダー識別子(azure、okta、pingなど){externalId}— 削除するユーザーの外部ID
リクエスト例
DELETE /azure/scim/Users/external-user-id-123
Authorization: Bearer {jwt-token}レスポンス
成功(204 No Content):
HTTP/1.1 204 No Content
Content-Type: application/scim+jsonDELETE操作は、成功時にHTTP 204(No Content)と空のレスポンスボディを返します。
エラーレスポンス
404 Not Found — ユーザーが見つかりません:
{
"Detail": "User with External ID 'ExternalUser112' was not found.",
"Status": 404,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}409 Conflict — ユーザーが現在ロックされており削除できません:
{
"ScimType": "mutability",
"Detail": "The resource 'ExternalUser11' with ID 'ExternalUser11' is immutable.",
"Status": 409,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}削除の代替方法:ユーザーを削除する代わりに、PATCHまたはPUT操作で無効化する方法もあります。
PATCH /{externalIdp}/scim/Users/{externalId}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "active",
"value": "false"
}
]
}グループ管理
グループスキーマ(Core2Group)
グループ作成の仕組み
システムは、以下の手順に従ったインテリジェントなグループ作成・更新ロジックを実装しています。
DisplayNameによるグループ検索:
まず、指定されたdisplayNameで既存グループの検索を試みます。見つかった場合はグループ更新として処理され、見つからない場合はグループ作成として処理されます。グループ作成と更新のロジック:
新規グループ:
displayNameで既存グループが見つからない場合、指定されたメンバーで新規グループを作成します。グループ更新:既存グループが見つかった場合、グループ情報を更新し、既存のメンバーシップに新しいメンバーを追加します(既存メンバーは置換されません)。
メンバー追加:新しいメンバーは、現在のメンバーを削除せずに既存グループに追加されます。
重複防止:システムはグループへの重複メンバーの追加を防止します。
グループ作成に関する重要な注意事項:
表示名の一意性:グループは
displayNameで識別されます。メンバーの解決:すべてのメンバー参照(
valueフィールド)は、既存ユーザーの有効なexternalId値である必要があります。増分メンバーシップ:既存グループに対するPOST操作は、メンバーシップ全体を置換するのではなく、メンバーを増分的に追加します。
メンバー検証:システムは存在するメンバーのみを追加します。指定された
value(externalId)のメンバーが存在しない場合、エラーなくスキップされます。外部IDプロバイダーのスコープ:現在の
externalIdpのユーザーで構成されるグループの部分のみを管理できます。他の外部IDプロバイダーのユーザーや内部DocuWareユーザーは、これらの操作の影響を受けません。レスポンス:レスポンスには、指定された
externalIdp(azure、okta、ping、onpremise、またはgenericなど)でプロビジョニングされた外部ユーザーであるグループメンバーのみが含まれます。内部ユーザーや他の外部IDプロバイダーで作成されたユーザーはレスポンスから除外されます。
メンバー参照の形式:
メンバーは
externalIdで参照されます(内部DocuWareユーザーIDではありません)各メンバーオブジェクトには、ユーザーの外部IDを含む
valueフィールドが必要ですオプションの
displayフィールド(ユーザーのuserName)を指定できますが、メンバーシップの割り当てには必須ではありません
グループの作成(POST)
POST /{externalIdp}/scim/Groups
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Engineering Team",
"members": [
{
"value": "external-user-id-123"
},
{
"value": "external-user-id-456"
}
]
}レスポンス
{
"displayName": "Engineering Team",
"members": [
{
"value": "external-user-id-123",
"display": "john.doe"
},
{
"value": "external-user-id-456",
"display": "jane.smith"
}
],
"id": "12345678-1234-1234-1234-123456789012",
"meta": {
"resourceType": "Group"
},
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
}空のグループの作成:
POST /{externalIdp}/scim/Groups
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Future Project Team",
"members": []
}必須フィールド:
schemas— SCIMスキーマ識別子("urn:ietf:params:scim:schemas:core:2.0:Group"を含む必要あり)displayName— グループの表示名(識別に使用)members— メンバーオブジェクトの配列(グループ作成時は空でも可)members[].value— ユーザーの外部ID(メンバーを指定する場合は必須)
エラーレスポンス
400 Bad Request — 必須フィールドの欠落:
{
"ScimType": "invalidValue",
"Detail": "Validation failed: DisplayName: is required",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}{
"ScimType": "invalidValue",
"Detail": "Validation failed: Members: The Members field is required.",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}{
"ScimType": "invalidValue",
"Detail": "Validation failed: Members[0].Value: Member Value is required.",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}グループの取得(GET)
GET Groupsエンドポイントは、オプションのフィルタリングとページネーションを使用してグループデータを取得する複数のバリエーションをサポートしています。グループには、指定された外部IDプロバイダーからの外部ユーザーであるメンバーが含まれます。
1. すべてのグループの取得(デフォルト)
GET /{externalIdp}/scim/Groups
Authorization: Bearer {token}DocuWareに存在するすべてのグループをメンバーなしで返します。メンバーはGETリクエスト /Groups/{groupId} で照会できます。
レスポンス:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 2,
"itemsPerPage": 2,
"startIndex": 1,
"resources": [
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "group-id-123",
"displayName": "Engineering Team",
"meta": {
"resourceType": "Group"
}
},
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "group-id-456",
"displayName": "Marketing Team",
"meta": {
"resourceType": "Group",
}
}
]
}2. IDによる特定グループの取得
GET /{externalIdp}/scim/Groups/{groupId}
Authorization: Bearer {token}グループIDを使用して特定グループの詳細を取得します。members属性には、指定されたIDプロバイダーでプロビジョニングされた外部ユーザーのみが含まれます。
レスポンス:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Engineering Team",
"members": [
{
"value": "external-user-id-123",
"display": "john.doe",
},
{
"value": "external-user-id-456",
"display": "jane.smith",
}
],
"id": "group-external-id-123",
"meta": {
"resourceType": "Group"
}
}3. フィルタリングによるグループのクエリ
表示名によるフィルタリング:
GET /{externalIdp}/scim/Groups?filter=displayName eq "Engineering Team"
Authorization: Bearer {token}ページネーション付きグループの取得:
GET /{externalIdp}/scim/Groups?startIndex=1&count=10
Authorization: Bearer {token}GET /{externalIdp}/scim/Groups?startIndex=2&count=5
Authorization: Bearer {token}サポートされるクエリパラメーター
フィルタリング:
filter— SCIMフィルター式(displayName eq "value"のみサポート)(大文字小文字を区別しない、完全一致)
ページネーション:
startIndex— 最初の結果の1ベースインデックス(デフォルト:1、最小値:1)count— ページあたりの結果数(未指定の場合はすべての結果がデフォルト、最小値:0)
レスポンス形式
すべてのGET /Groupsリクエストは、以下の構造のSCIM ListResponseを返します。
ListResponseプロパティ:
schemas—"urn:ietf:params:scim:api:messages:2.0:ListResponse"を含む配列totalResults— 一致するグループの合計数itemsPerPage — 現在のレスポンスで返されるグループ数startIndex— 現在のページの開始インデックス(1ベース)resources— グループオブジェクトの配列(members属性はグループIDで取得した場合のみ利用可能)
グループオブジェクトのプロパティ:
id— グループの外部IDdisplayName— グループの表示名members— メンバーオブジェクトの配列(指定されたexternalIdpからの外部ユーザーのみ)value— メンバーの外部ユーザーIDdisplay— メンバーのユーザー名
meta— オブジェクトのリソースタイプschemas— SCIMスキーマ識別子を含む配列
グループレスポンスに関する注意
メンバーフィルタリング:
指定された{
externalIdp}で管理される外部ユーザーであるメンバーのみがレスポンスに含まれます内部DocuWareユーザーおよび他の外部IDプロバイダーからのユーザーは除外されます
空のグループ(該当メンバーなし)も、存在する場合は結果に表示されることがあります
グループの識別:
GET操作では、グループは
IDで識別されますdisplayNameは、フィルタリングおよび作成・更新時のグループ検索に使用されます
エラーレスポンス
400 Bad Request — 無効なフィルター:
不正な属性によるフィルタリング:
{
"ScimType": "invalidFilter",
"Detail": "Unsupported filter attribute: id",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}無効な式によるフィルタリング(有効な形式は filter=displayName eq "groupName" のみ):
{
"ScimType": "invalidFilter",
"Detail": "Invalid filter expression: 'displasyname asd \"engineering team\"'",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}サポートされない比較演算子によるフィルタリング:
{
"ScimType": "invalidFilter",
"Detail": "Unsupported comparison operator: 'ne'",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}404 Not Found — グループが見つかりません:
{
"Detail": "Group with identifier 'group-id-404' was not found.",
"Status": 404,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}グループメンバーシップの更新(PATCH)
PATCH操作では、SCIM 2.0パッチ操作を使用してグループ属性の部分更新が可能です。サービスは、グループ管理のためのadd、removeおよびreplace(グループのdisplayNameのみ)操作をサポートしています。
基本的なPATCH構造
PATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "operation_type",
"path": "attribute_path",
"value": "new_value_or_array"
}
]
}サポートされる操作
メンバーの追加(add):既存メンバーを削除せずに、新しいメンバーをグループに追加します。
vPATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{
"value": "external-user-id-789"
},
{
"value": "external-user-id-101"
}
]
}
]
}特定メンバーの削除(remove):指定されたメンバーをグループから削除します。
PATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members",
"value": [
{
"value": "external-user-id-123"
},
{
"value": "external-user-id-456"
}
]
}
]
}すべてのメンバーの削除(remove):指定されたexternalIdpで作成されたすべてのメンバーをグループから削除します(グループを空にします)。
PATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members"
}
]
}remove操作でvalueが指定されない場合、すべての外部メンバー(指定されたexternalIdpからのメンバー)がグループから削除されます。
グループ表示名の置換(replace)グループの表示名を更新します。
PATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "displayName",
"value": "Updated Team Name"
}
]
}サポートされる属性パス
パス | 操作 | 説明 | 値の形式 |
|
| グループの表示名 | 文字列 |
|
| グループメンバーシップ | メンバーオブジェクトの配列 |
単一リクエストでの複数操作
単一のPATCHリクエストで複数の操作を組み合わせることができます。
PATCH /{externalIdp}/scim/Groups/{id}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "displayName",
"value": "DevOps Engineering Team"
},
{
"op": "add",
"path": "members",
"value": [
{
"value": "external-user-id-new1"
}
]
},
{
"op": "remove",
"path": "members",
"value": [
{
"value": "external-user-id-old1"
}
]
}
]
}メンバーオブジェクトの形式
操作でメンバーを指定する場合は、以下の形式を使用してください。
必須フィールド:
value— 追加・削除するユーザーの外部ID
メンバーオブジェクトの例:
{
"value": "external-user-id-123"
}操作の動作詳細
Add操作:
指定されたメンバーをグループに追加します
既にグループに存在するメンバーは無視されます(重複なし)
存在しないユーザーの外部IDはサイレントに無視されます
既存メンバーに影響しません
Remove操作:
value指定あり:指定されたメンバーのみを削除します(指定されたexternalIdpで作成されたユーザーの場合)value指定なし:すべてのメンバー(指定されたexternalIdpで作成されたユーザー)をグループから削除します現在のメンバーでない外部IDは無視されます
指定されていないメンバーに影響しません
Replace操作:
displayNameの場合:グループ名を更新します
レスポンス
成功時のPATCHレスポンス(204 No Content)
400 Bad Request — 無効な操作
400 Bad Request — 無効なパス
400 Bad Request — 無効なメンバー形式
404 Not Found — グループが見つかりません
409 Conflict — グループ名が既に存在
PATCH操作に関する重要な注意事項
操作処理:
操作は記述順に順番に処理されます
メンバー検証:
ユーザーの外部IDは既存ユーザーを参照する必要があります
無効な外部IDはサイレントに無視されます(エラーはスローされません)
同じIDプロバイダー(
externalIdp)からの外部ユーザーのみが管理されます
グループの状態:
レスポンスには、指定された
{externalIdp}からの外部ユーザーのみが含まれます内部DocuWareユーザーおよび他のIDプロバイダーからのユーザーはレスポンスから除外されます
空のグループは有効であり、レスポンスに含まれます
グループの更新(PUT)— グループの完全置換
PUT操作は、externalIdpによって提供されるグループ部分の完全な置換を行います。指定されたフィールドのみを更新するPATCHとは異なり、PUTは指定されたデータでグループオブジェクト全体を置換します。
基本的なPUTリクエスト
PUT /{externalIdp}/scim/Groups/{groupId}
Content-Type: application/scim+json
Authorization: Bearer {token}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Updated Engineering Team",
"members": [
{
"value": "external-user-id-123"
},
{
"value": "external-user-id-456"
}
]
}パラメーター
{externalIdp}— 外部IDプロバイダー識別子(azure、okta、pingなど){groupId}— 更新するグループのID
PUTの必須フィールド
グループ作成に必須のすべてのフィールドを指定する必要があります。
schemas— SCIMスキーマ識別子("urn:ietf:params:scim:schemas:core:2.0:Group"を含む必要あり)displayName— グループの表示名members— メンバーオブジェクトの配列(空でも可)
完全なPUTの例
PUT /azure/scim/Groups/group-id-123
Content-Type: application/scim+json
Authorization: Bearer {jwt-token}
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "DevOps Engineering Team",
"members": [
{
"value": "external-user-id-789"
},
{
"value": "external-user-id-101"
}
]
}レスポンス
成功(200 OK):
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"id": "group-id-123",
"displayName": "DevOps Engineering Team",
"members": [
{
"value": "external-user-id-789",
"display": "john.doe",
},
{
"value": "external-user-id-101",
"display": "jane.smith",
}
],
"meta": {
"resourceType": "Group"
}
}PUTの動作に関する重要な注意事項
メンバーの完全置換:PUTは、現在の
externalIdpが管理するメンバーリスト全体を置換します。リクエストに含まれていないメンバーはグループから削除されます。表示名の更新:PUT操作でグループの表示名を変更できます。
メンバー検証:指定されたすべてのメンバーの外部IDは、既存ユーザーを参照する必要があります。無効な外部IDはサイレントにスキップされます。
外部IDプロバイダーのスコープ:この操作では、指定された
{externalIdp}からの外部ユーザーであるメンバーのみが管理されます。内部DocuWareユーザーおよび他のIDプロバイダーからのユーザーは影響を受けません。グループの識別:グループはURLの
{groupId}パラメーターで識別されます。
エラーレスポンス
400 Bad Request — 必須フィールドの欠落:
{
"ScimType": "invalidValue",
"Detail": "Validation failed: DisplayName: is required",
"Status": 400,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}404 Not Found — グループが見つかりません:
{
"Detail": "Group with identifier 'group-id-404' was not found.",
"Status": 404,
"Schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
]
}
PUTの検証ルール
POST操作のすべての検証ルールがPUT操作にも適用されます。
DisplayName:必須、大文字小文字を区別、空または空白のみは不可
Members:オプションの配列。各メンバーには既存ユーザーの外部IDを含む有効なvalueフィールドが必要
メンバーの外部ID:同じ外部IDプロバイダーの既存ユーザーを参照する必要あり
Schemas:Core Groupスキーマを含む必要あり
グループの削除(DELETE)— サポートされません
グループのDELETE操作は、DocuWareユーザープロビジョニングv3サービスではサポートされていません。グループの削除を試みるとエラーレスポンスが返されます。
HTTPステータスコード
ステータスコード | 説明 | 使用場面 |
200 OK | 成功 | GET、PATCH操作 |
201 Created | リソース作成 | POST操作 |
204 No Content | 成功、コンテンツなし | DELETE、一部のPATCH操作 |
400 Bad Request | 無効なリクエスト | 検証エラー |
401 Unauthorized | 認証が必要 | トークンの欠落・無効 |
403 Forbidden | アクセス拒否 | 権限不足 |
404 Not Found | リソースが見つからない | 無効なリソースID |
409 Conflict | リソースの競合 | ユーザー名・メールの重複 |
500 Internal Server Error | サーバーエラー | サービスの問題 |
501 Not Implemented | 未サポート | 製品でサポートされていない機能 |
エラーレスポンスの形式
{
"ScimType": "invalidValue",
"Detail": "Validation failed.",
"Status": 400,
"Schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"]
}設定要件
IDプロバイダーのセットアップ
適切なテナントURLを指すようにIdPを設定します
JWTトークンを使用したOAuth 2.0/OIDC認証を設定します
正しいスコープを設定します:
docuware.userProvisioningAPI操作を実行するユーザーが十分な権限を持っていることを確認してください。
サポートされるIDプロバイダー
Azure Entra ID(Azure AD):externalIdpに
azureを使用Okta:externalIdpに
oktaを使用Ping Identity:externalIdpに
pingを使用オンプレミス:externalIdpに
onpremiseを使用汎用IdP
スキーマ情報
利用可能なスキーマの取得
GET /{externalIdp}/scim/Schemas
Authorization: Bearer {token}リソースタイプの取得
GET /{externalIdp}/scim/ResourceTypes
Authorization: Bearer {token}ヘルスチェック
サービスの可用性
GET /AvailabilityCheckこのエンドポイントは認証不要で、サービスが稼働中の場合は200 OKを返します。
統合ワークフローの例
ユーザープロビジョニングの完全なワークフロー
ユーザーの作成:ユーザーの詳細を含めて
/UsersにPOST作成の確認:
/Users/{id}にGETで確認ユーザーの更新:変更内容を含めて
/Users/{id}にPATCHグループへの追加:ユーザーを追加するために
/Groups/{groupId}にPATCH無効化:
active: falseで/Users/{id}にPATCH
グループ管理ワークフロー
グループの作成:グループの詳細を含めて
/GroupsにPOSTメンバーの追加:add操作で
/Groups/{id}にPATCH名前の更新:displayNameの変更で
/Groups/{id}にPATCHメンバーの削除:remove操作で
/Groups/{id}にPATCH
このAPIは、セキュリティとパフォーマンスのベストプラクティスを維持しながら、外部IDプロバイダーを通じてDocuWareのユーザーとグループを管理するための堅牢で標準準拠のインターフェースを提供します。