SCIM(System for Cross-domain Identity Management)는 개방형 표준이며 표준화된 인터페이스로 사용자 정보를 교환할 수 있도록 제공한다.
SCIM을 이용해 IdP(Identity Provider)로부터 구성원과 그룹을 프로비저닝하는 과정을 간소화하고, 수작업을 줄일 수 있다.
다음의 SCIM 2.0 RFC 문서를 기반으로 구현한다.
IdP(Identity Provider) 또는 인사 시스템에서 SCIM 연동을 통해 다음과 같은 기능을 활용할 수 있다.
신규 입사한 구성원 정보를 IdP 또는 인사 시스템에 추가하면 프로비저닝을 통해 NAVER WORKS에도 자동으로 계정이 생성된다.
구성원이 퇴사하여 IdP 또는 인사 시스템에서 삭제되면 NAVER WORKS에서도 자동으로 비활성화된다.
비활성화된 구성원은 더 이상 NAVER WORKS에 로그인할 수 없다. 자세한 내용은 User - Status를 참고한다.
IdP 또는 인사 시스템에서 구성원 정보(이름, 이메일, 전화번호 등)가 변경되면 NAVER WORKS에도 자동으로 동기화된다.
프로젝트, TF 등을 위한 커뮤니케이션 목적의 팀을 구성할 때 그룹 멤버십을 중앙에서 관리할 수 있다.
IdP 또는 인사 시스템에서 그룹의 멤버를 추가하거나 삭제하면 NAVER WORKS에도 자동으로 반영된다.
이를 통해 메시지방 및 메시지방 기능(노트, 캘린더, 폴더, 할 일) 리소스의 접근 권한을 제어할 수 있다.
자세한 내용은 Group을 참고한다.
SCIM 프로비저닝은 유료 상품에서만 사용할 수 있다. 무료 상품에서는 사용할 수 없다.
SCIM API를 호출하기 위한 엔드포인트는 다음과 같다.
https://www.worksapis.com/scim/v2예를 들어, 구성원 목록을 조회한다면 다음과 같이 호출한다.
GET https://www.worksapis.com/scim/v2/UsersAPI를 호출하려면 Access Token이 필요하다.
SCIM 전용 Long-Lived Token 발급 방법을 참고하여 Access Token을 획득하고, Authorization 헤더를 사용하여 Bearer Token 방식으로 호출해야 한다.
Authorization: Bearer {Access Token}구성원을 관리할 수 있다.
| HTTP Request | Description |
|---|---|
| POST /scim/v2/Users | 구성원 추가 |
| GET /scim/v2/Users | 구성원 목록 조회 |
| GET /scim/v2/Users/{userId} | 구성원 조회 |
| PUT /scim/v2/Users/{userId} | 구성원 수정 |
| PATCH /scim/v2/Users/{userId} | 구성원 부분 수정 |
| DELETE /scim/v2/Users/{userId} | 구성원 비활성화. 퇴사 상태로 변경하거나 완전히 삭제하는 것이 아니라, 구성원의 active 속성값을 false로 설정하여 일시 정지 상태로 변경한다. 비활성화 된 구성원을 다시 활성화하려면 구성원 수정 또는 구성원 부분 수정 SCIM API로 active 속성의 값을 true로 변경한다.구성원을 삭제하려면 구성원 삭제 또는 구성원 즉시 삭제 NAVER WORKS API를 호출하거나 Admin Console을 이용해야 한다. |
SCIM으로 프로비저닝되는 구성원의 상태 라이프사이클은 다음과 같다.

구성원의 활성화 여부는 active 속성(boolean)으로 관리한다.
WORKS 내에서 active 속성값은 '로그인 가능 여부'를 의미한다.
각 구성원 상태별 active 속성값은 다음과 같다.
구성원 상태에 대한 자세한 설명은 Directory API 개요 - 구성원(users)를 참조한다.
| 구성원 상태 | NAVER WORKS API | Scim User의 active 속성값 | 비고 |
|---|---|---|---|
| 미접속 | isPending=true | true | |
| 사용 대기 | isAwaiting=true | false | SCIM API로는 설정할 수 없는 구성원 상태. 관리자가 설정한 활성화 일자가 될 때까지 사용할 수 없다. 따라서 active: true로 변경할 수 없다. |
| 사용 중 | true | ||
| 일시 정지 | isSuspended=true | false | 구성원 수정 또는 구성원 부분 수정으로 active: false로 변경하거나 구성원 비활성화를 호출하는 경우의 구성원 상태 |
| 삭제 | isDeleted=true | false | SCIM API로는 설정할 수 없는 구성원 상태. |
SCIM Group API로는 내부 그룹만 조작할 수 있다.
동적 그룹은 조회만 가능하다.
외부 그룹은 생성, 수정, 삭제, 조회할 수 없다.
프로젝트나 사내 모임 활동과 같은 커뮤니케이션을 위한 그룹을 관리할 수 있다.
| HTTP Request | Description |
|---|---|
| POST /scim/v2/Groups | 그룹 추가 |
| GET /scim/v2/Groups | 그룹 목록 조회 |
| GET /scim/v2/Groups/{groupId} | 그룹 조회 |
| PUT /scim/v2/Groups/{groupId} | 그룹 수정 |
| PATCH /scim/v2/Groups/{groupId} | 그룹 부분 수정 |
| DELETE /scim/v2/Groups/{groupId} | 그룹 삭제 |
SCIM API는 API당 240 requests/min의 호출 제한이 적용된다.
User Key를 반드시 "NAVER WORKS Account(ex. id@domain)"로 선택해야 한다.RFC 7644 - 3.5.2. Modifying with PATCH 명세에 따라 동작한다.
filter 연산은 제한적으로 제공한다.
A and B는 허용하지만 A and B and C는 제공하지 않는다.Request Body의 Operations 속성에서 수정하려는 대상 속성의 유형에 따라 허용하는 포맷은 다음과 같다.
{ "op": "[ ADD | REPLACE ]", "path": "{key}", "value": "{value}"}{ "op": "[ ADD | REPLACE ]", "value": { "{key}": "{value}" }}{ "op": "REMOVE", "path": "{key}"}{ "op": "[ ADD | REPLACE ]", "path": "{mainKey}.{subKey}", "value": "{value}"}{ "op": "[ ADD | REPLACE ]", "path": "{mainKey}", "value": { "{subKey1}": "{value1}", "{subKey2}": "{value2}", ... }}{ "op": "[ ADD | REPLACE ]", "value": { "{mainKey}": { "{subKey1}": "{value1}", "{subKey2}": "{value2}" , ... } }}{ "op": "REMOVE", "path": "{mainKey}"}{ "op": "REMOVE", "path": "{mainKey}.{subKey}"}{ "op": "[ ADD | REPLACE ]", "path": "{key}", "value": [ object1, object2, ... ]}{ "op": "[ ADD | REPLACE ]", "value": { "{key}": [ object1, object2, ... ] }}{ "op": "[ ADD | REPLACE ]", "path": "{key}[filter]", "value": object}{ "op": "[ ADD | REPLACE ]", "path": "{key}[filter].{subKey}", "value": "{value}"}{ "op": "ADD", "path": "{key}", "value": object}{ "op": "REMOVE", "path": "{key}"}{ "op": "REMOVE", "path": "{key}[filter]"}{ "op": "REMOVE", "path": "{key}", "value": [ { "value": "{value}" }, ... ]}{ "op": "REMOVE", "path": "{key}[filter]", "value": [ { "value": "{value}" }, ... ]}Admin Console의 감사 > 주소록 페이지에서 서비스 타입을 SCIM으로 필터링하면 SCIM API 호출 이력을 확인할 수 있다.