기본 URL
XID는 /scim/v2/organizations/{organization_id} 아래에서 조직 범위 SCIM 2.0 API를 제공합니다. 사용자 및 그룹 리소스는 경로의 조직 ID로 지정됩니다.
ID 공급자에 기본 URL을 설정하세요 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 |
디렉터리 사용자 하나를 조회, 교체, 패치 또는 프로비저닝 해제합니다. |
/scim/v2/organizations/{organization_id}/Groups |
GET, POST |
디렉터리 그룹을 만들고 조회합니다. |
/scim/v2/organizations/{organization_id}/Groups/{id} |
GET, PUT, PATCH, DELETE |
디렉터리 그룹 하나를 조회, 교체, 패치 또는 제거합니다. |
사용자 리소스
사용자 리소스는 외부 식별자로 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으로 사용자 하나를 찾습니다. |
filter=displayName eq "Engineering" |
displayName으로 그룹 하나를 찾습니다. |
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개 작업, 1MiB 페이로드 제한의 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 오류는 SCIM 오류 스키마, HTTP 상태, 세부 정보, 선택적 scimType와 함께 application/scim+json을 반환합니다.
{
"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용 inbound SCIM Service Provider 엔드포인트를 제공합니다. Downstream SaaS SCIM push client는 로컬 fake-SaaS 증거가 있지만, 프로덕션 지원에는 여전히 실제 SaaS 관리자 L4가 필요합니다.
프로비저닝 해제 동작
- 디렉터리 토큰 순환은 짧은 유예 기간 동안 이전 토큰을 계속 유효하게 유지합니다.
active=false및DELETE /Users/{id}사용자를 프로비저닝 해제하고 활성 세션을 폐기합니다.- 그룹 멤버십 업데이트는 멱등입니다. 알 수 없는 멤버는 사용자가 ID 공급자에서 도착한 뒤 해석할 수 있습니다.