Microsoft Entra 사용자 프로비저닝 서비스의 SCIM 2.0 프로토콜 준수와 관련하여 알려진 문제 및 해결 방법
Microsoft Entra ID는 SCIM(System for Cross-Domain Identity Management) 2.0 프로토콜 사양에 정의된 인터페이스를 가진 웹 서비스가 향하는 애플리케이션 또는 시스템에 사용자 및 그룹을 자동으로 프로비전할 수 있습니다.
Microsoft Entra의 SCIM 2.0 프로토콜 지원은 SCIM(System for Cross-Domain Identity Management)을 사용하여 Microsoft Entra ID에서 애플리케이션으로 사용자 및 그룹 자동 프로비전에서 설명합니다. 여기서는 SCIM 2.0을 지원하는 애플리케이션으로 Microsoft Entra ID에서 사용자 및 그룹을 자동 프로비전하기 위해 구현하는 프로토콜의 특정 부분을 나열합니다.
이 문서에서는 Microsoft Entra 사용자 프로비저닝 서비스의 SCIM 2.0 프로토콜 준수와 관련한 현재와 과거의 문제 및 이러한 문제를 해결하는 방법을 설명합니다.
프로비저닝 작업 이해
프로비저닝 서비스는 작업 개념을 사용하여 애플리케이션에 대해 작동합니다. jobID는 진행률 표시줄에서 찾을 수 있습니다. 모든 새 프로비저닝 애플리케이션은 "scim"으로 시작하는 jobID를 사용하여 만들어집니다. SCIM 작업은 서비스의 현재 상태를 나타냅니다. 이전 작업에는 ID "customappsso"가 있습니다. 이 작업은 2018년의 서비스 상태를 나타냅니다.
갤러리에서 애플리케이션을 사용하는 경우 작업에는 일반적으로 앱 이름(예: Zoom snowFlake 또는 dataBricks)이 포함됩니다. 갤러리 애플리케이션을 사용하는 경우 이 설명서를 건너뛸 수 있습니다. 이는 주로 jobID SCIM 또는 customAppSSO를 사용하는 비갤러리 애플리케이션에 적용됩니다.
SCIM 2.0 준수 문제 및 상태
아래 표에서 fixed로 표시된 항목은 SCIM 작업에서 적절한 동작을 찾을 수 있음을 의미합니다. 변경한 내용에 대해 이전 버전과의 호환성을 보장하기 위해 노력했습니다. 새 구현에는 새로운 동작을 사용하고 기존 구현을 업데이트하는 것이 좋습니다. 2018년 12월 이전에 기본값이었던 customappSSO 동작은 더 이상 지원되지 않습니다.
참고 항목
2018년에 변경된 사항의 경우 customappsso 동작으로 되돌릴 수 있습니다. 2018 년 이후 변경된 사항의 경우 URL을 사용하여 이전 동작으로 되돌릴 수 있습니다. 이전 jobID로 되돌리거나 플래그를 사용하여 이전에 변경한 내용에 대해 이전 버전과의 호환성을 보장하기 위해 노력했습니다. 그러나 앞에서 설명한 대로 이전 동작은 구현하는 것은 더 이상 지원되지 않습니다. 새 구현에는 새로운 동작을 사용하고 기존 구현을 업데이트하는 것이 좋습니다.
SCIM 2.0 준수 문제 | 수정? | 수정 날짜 | 이전 버전과의 호환성 |
---|---|---|---|
Microsoft Entra ID가 애플리케이션의 SCIM 엔드포인트 URL의 루트에 위치하려면 “/scim”이 필요함 | 예 | 2018년 12월 18일 | customappSSO로 다운그레이드 |
확장 특성은 특정 이름 앞에 콜론 “:” 대신 점 “.” 표기법을 사용함 | 예 | 2018년 12월 18일 | customappSSO로 다운그레이드 |
다중 값 특성의 패치 요청에 있는 경로 필터 구문이 잘못됨 | 예 | 2018년 12월 18일 | customappSSO로 다운그레이드 |
그룹 생성 요청에 있는 스키마 URI가 잘못됨 | 예 | 2018년 12월 18일 | customappSSO로 다운그레이드 |
준수를 보장하기 위해 패치 동작 업데이트(예: 부울로 활성화 및 적절한 그룹 멤버 자격 제거) | 아니요 | 미정 | 기능 플래그 사용 |
SCIM 동작을 변경하기 위한 플래그
기본 SCIM 클라이언트 동작을 변경하려면 애플리케이션의 테넌트 URL에서 아래 플래그를 사용합니다.
다음 URL을 사용하여 패치 동작을 업데이트하고 SCIM 준수를 보장합니다. 플래그는 다음 동작을 변경합니다.
- 사용자를 사용하지 않도록 설정하기 위한 요청
- 단일 값 문자열 특성을 추가하기 위한 요청
- 여러 특성을 바꾸기 위한 요청
- 그룹 구성원을 제거하기 위한 요청
이 동작은 현재 플래그를 사용하는 경우에만 사용할 수 있지만 향후 몇 달 동안 기본 동작이 될 것입니다. 참고로 이 기능 플래그는 현재 주문형 프로비저닝에서 작동하지 않습니다.
- URL(SCIM 준수): aadOptscim062020
- SCIM RFC 참조:
다음은 동기화 엔진이 현재 전송하는 내용과 기능 플래그가 사용하도록 설정된 후 전송되는 요청을 간략하게 설명하는 샘플 요청입니다.
사용자를 사용하지 않도록 설정하기 위한 요청:
기능 플래그 제외
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "Replace",
"path": "active",
"value": "False"
}
]
}
기능 플래그 포함
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "replace",
"path": "active",
"value": false
}
]
}
단일 값 문자열 특성을 추가하기 위한 요청:
기능 플래그 제외
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "Add",
"path": "nickName",
"value": "Babs"
}
]
}
기능 플래그 포함
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "nickName",
"value": "Babs"
}
]
}
여러 특성을 바꾸기 위한 요청:
기능 플래그 제외
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "Replace",
"path": "displayName",
"value": "Pvlo"
},
{
"op": "Replace",
"path": "emails[type eq \"work\"].value",
"value": "TestBcwqnm@test.microsoft.com"
},
{
"op": "Replace",
"path": "name.givenName",
"value": "Gtfd"
},
{
"op": "Replace",
"path": "name.familyName",
"value": "Pkqf"
},
{
"op": "Replace",
"path": "externalId",
"value": "Eqpj"
},
{
"op": "Replace",
"path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber",
"value": "Eqpj"
}
]
}
기능 플래그 포함
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "replace",
"path": "emails[type eq \"work\"].value",
"value": "TestMhvaes@test.microsoft.com"
},
{
"op": "replace",
"value": {
"displayName": "Bjfe",
"name.givenName": "Kkom",
"name.familyName": "Unua",
"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber": "Aklq"
}
}
]
}
그룹 구성원을 제거하기 위한 요청:
기능 플래그 제외
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "Remove",
"path": "members",
"value": [
{
"value": "u1091"
}
]
}
]
}
기능 플래그 포함
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "remove",
"path": "members[value eq \"7f4bc1a3-285e-48ae-8202-5accb43efb0e\"]"
}
]
}
- 다운그레이드 URL: 새 SCIM 준수 동작이 비갤러리 애플리케이션에서 기본값이 되면 다음 URL을 사용하여 이전 비SCIM 준수 동작(AzureAdScimPatch2017)으로 롤백할 수 있습니다.
이전 customappsso 작업에서 SCIM 작업으로 업그레이드
아래 단계를 수행하면 기존 customappsso 작업이 삭제되고 새 SCIM 작업이 생성됩니다.
최소한 응용 프로그램 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
ID>애플리케이션>엔터프라이즈 애플리케이션으로 이동합니다.
기존 SCIM 애플리케이션을 찾아 선택합니다.
기존의 SCIM 앱의 속성 섹션에서 개체 ID를 복사합니다.
새 웹 브라우저 창에서 https://developer.microsoft.com/graph/graph-explorer로 이동하여 앱이 추가된 Microsoft Entra 테넌트의 관리자로 로그인합니다.
Graph 탐색기에서 아래 명령을 실행하여 프로비저닝 작업의 ID를 찾습니다. “[object-id]”를 세 번째 단계에서 복사한 서비스 주체 ID(개체 ID)로 바꿉니다.
GET https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs
결과에서 “customappsso” 또는 “scim”으로 시작하는 전체 “ID” 문자열을 복사합니다.
백업을 수행할 수 있도록, 아래 명령을 실행하여 특성 매핑 구성을 검색합니다. 이전과 동일한 [object-id]를 사용하고, [job-id]를 마지막 단계에서 복사한 프로비저닝 작업 ID로 바꿉니다.
GET https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[job-id]/schema
마지막 단계의 JSON 출력을 복사하여 텍스트 파일에 저장합니다. JSON에는 이전 앱에 추가한 모든 사용자 지정 특성 매핑이 포함되어 있으며, 약 몇 천 줄의 JSON이 있어야 합니다.
아래 명령을 실행하여 프로비저닝 작업을 삭제합니다.
DELETE https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[job-id]
아래 명령을 실행하여 최신 서비스 수정 사항이 있는 새 프로비저닝 작업을 만듭니다.
POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs
{ "templateId": "scim" }
- 마지막 단계의 결과에서 “scim”으로 시작하는 전체 “ID” 문자열을 복사합니다. 선택적으로, 아래 명령을 실행하여 이전 특성 매핑을 다시 적용하고 [new-job-id]를 방금 복사한 새 작업 ID로 바꾸고 7단계의 JSON 출력을 요청 본문으로 입력합니다.
PUT https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[new-job-id]/schema
{ <your-schema-json-here> }
- 첫 번째 웹 브라우저 창으로 돌아가서 애플리케이션에 해당하는 프로비저닝 탭을 선택합니다.
- 구성을 확인한 후 프로비저닝 작업을 시작합니다.
SCIM 작업에서 customappsso 작업으로 다운그레이드(권장하지 않음)
이전 동작으로 다시 다운그레이드할 수 있지만 customappsso는 일부 업데이트의 이점을 활용하지 못하고 계속 지원되지 않을 수 있으므로 권장하지 않습니다.
최소한 응용 프로그램 관리자로 Microsoft Entra 관리 센터에 로그인합니다.
ID>애플리케이션>엔터프라이즈 애플리케이션으로 이동합니다.
애플리케이션 만들기 섹션에서 새 비갤러리 애플리케이션을 만듭니다.
새 사용자 지정 앱의 속성 섹션에서 개체 ID를 복사합니다.
새 웹 브라우저 창에서 https://developer.microsoft.com/graph/graph-explorer로 이동하여 앱이 추가된 Microsoft Entra 테넌트의 관리자로 로그인합니다.
Graph 탐색기에서 아래 명령을 실행하여 앱의 프로비저닝 구성을 초기화합니다. “[object-id]”를 세 번째 단계에서 복사한 서비스 주체 ID(개체 ID)로 바꿉니다.
POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs
{ templateId: "customappsso" }
첫 번째 웹 브라우저 창으로 돌아가서 애플리케이션에 해당하는 프로비저닝 탭을 선택합니다.
일반적으로 하는 방법대로 사용자 프로비저닝 구성을 완료합니다.