ベース URL
XID は /scim/v2/organizations/{organization_id} 配下で組織スコープの SCIM 2.0 API を公開します。ユーザーとグループのリソースはパス内の組織 ID で指定します。
ベース URL を使って ID プロバイダーを設定 https://xid.dev/scim/v2/organizations/{organization_id} ディレクトリの作成またはローテーション時に一度だけ表示されるディレクトリトークン。
curl https://xid.dev/scim/v2/organizations/{organization_id}/Users \
-H 'Authorization: Bearer scim_xxx' \
-H 'Content-Type: application/scim+json'認証
SCIM 呼び出しは管理 API で作成されたディレクトリ Bearer トークンを使用します。XID はトークンのハッシュだけを保存し、平文トークンは作成またはローテーション時に一度だけ返します。
| ヘッダー | 値 | メモ |
|---|---|---|
Authorization |
Bearer scim_xxx |
組織スコープのユーザーエンドポイントとグループエンドポイントに必要です。 |
Content-Type |
application/scim+json |
POST、PUT、PATCH リクエストで必須です。 |
Accept |
application/scim+json |
すべての SCIM クライアントに推奨されます。 |
エンドポイント
| エンドポイント | 方式 | 使用 |
|---|---|---|
/scim/v2/ServiceProviderConfig |
GET |
SCIM クライアント検出用の ServiceProviderConfig レスポンス。 |
/scim/v2/Schemas |
GET |
ユーザーとグループのスキーマメタデータ。 |
/scim/v2/ResourceTypes |
GET |
サポートされる SCIM リソース種別。 |
/scim/v2/organizations/{organization_id}/Users |
GET, POST |
ディレクトリユーザーを作成、一覧表示します。 |
/scim/v2/organizations/{organization_id}/Users/{id} |
GET, PUT, PATCH, DELETE |
ディレクトリユーザー 1 件を読み取り、置換、パッチ、またはプロビジョニング解除します。 |
/scim/v2/organizations/{organization_id}/Groups |
GET, POST |
ディレクトリグループを作成、一覧表示します。 |
/scim/v2/organizations/{organization_id}/Groups/{id} |
GET, PUT, PATCH, DELETE |
ディレクトリグループ 1 件を読み取り、置換、パッチ、または削除します。 |
ユーザーリソース
ユーザーリソースは外部識別子として userName を使用します。メール値、プロフィール名フィールド、アクティブ状態、エンタープライズ拡張フィールドは SCIM 生プロファイルに保持されます。
| SCIM フィールド | XID の動作 |
|---|---|
id |
安定した XID ディレクトリユーザー ID。 |
userName |
必須です。ディレクトリ内で一意である必要があります。 |
active |
false はユーザーのプロビジョニングを解除し、アクティブなセッションを取り消します。 |
emails |
プライマリメールは照合とアカウントリンクに使用されます。 |
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User |
部署などのエンタープライズ属性として保存および返されます。 |
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "alice@example.com",
"active": true,
"name": { "givenName": "Alice", "familyName": "Lee" },
"emails": [{ "value": "alice@example.com", "primary": true }]
}グループリソース
グループリソースは一意のディレクトリグループ名として displayName を使用します。メンバーは SCIM ユーザー ID を参照し、冪等に同期されます。
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Engineering",
"members": [
{ "value": "dir_user_123", "display": "alice@example.com" }
]
}フィルタリング、ソート、ページネーション
XID は and、or、not と比較演算子(eq、ne、co、sw、ew、gt、ge、lt、le、pr)を含む SCIM フィルター文法をサポートします。未サポート式は invalidFilter を返します。一覧応答は startIndex、count、totalResults を使う SCIM 1 始まりのページネーションと、任意の sortBy、sortOrder を使用します。
| クエリ | サポート |
|---|---|
filter=userName eq "alice@example.com" |
userName でユーザーを 1 件検索します。 |
filter=displayName eq "Engineering" |
displayName でグループを 1 件検索します。 |
filter=userName sw "alice" and active eq true |
論理演算子と比較演算子を組み合わせます。 |
sortBy=userName&sortOrder=ascending |
ユーザーまたはグループ一覧の結果を並べ替えます。 |
startIndex=1&count=100 |
先頭の結果から最大 100 件のリソースを返します。 |
attributes=userName,emails.value |
schemas、id、および要求された SCIM 属性のみを返します。 |
excludedAttributes=emails,meta |
除外された SCIM 属性を含まないデフォルトのリソースを返します。 |
一括操作
POST /scim/v2/organizations/{organization_id}/Bulk は最大 100 操作、1 MiB ペイロード上限の BulkRequest を受け付けます。一部が失敗しても BulkResponse で操作ごとの HTTP ステータスを返します。
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
"Operations": [
{
"method": "POST",
"path": "/Users",
"bulkId": "user1",
"data": { "userName": "alice@example.com", "active": true }
}
]
}ETag and If-Match
リソース GET 応答には meta.version 由来の ETag: W/"<meta.version>" が含まれます。PUT と PATCH には現在バージョンと一致する If-Match ヘッダーが必要で、欠落時は 428、不一致時は 412 を返します。
PATCH 操作
PATCH リクエストは urn:ietf:params:scim:api:messages:2.0:PatchOp を使用します。XID は書き込み可能なプロフィール項目とグループメンバーシップに対して add、replace、remove をサポートします。
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{ "op": "replace", "path": "active", "value": false }
]
}エラーレスポンス
SCIM エラーは application/scim+json を返し、SCIM Error スキーマ、HTTP ステータス、詳細、任意の scimType を含みます。
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"status": "409",
"scimType": "uniqueness",
"detail": "userName already exists"
}ServiceProviderConfig の機能
ServiceProviderConfigはsort.supported=true、bulk.supported=true、etag.supported=trueを公開します。- XID は外部 IdP 向けに入站 SCIM サービスプロバイダーエンドポイントを公開します。下流 SaaS SCIM push クライアントはローカルの fake-SaaS 証拠を持っていますが、本番サポートには引き続き実際の SaaS 管理者 L4 が必要です。
プロビジョニング解除の動作
- ディレクトリトークンのローテーションでは、以前のトークンが短い猶予期間だけ有効なままになります。
active=falseおよびDELETE /Users/{id}ユーザーのプロビジョニングを解除し、アクティブなセッションを取り消します。- グループメンバーシップ更新は冪等です。不明なメンバーは、ユーザーが ID プロバイダーから到着した後に解決できます。