針對 Microsoft Entra 使用者佈建服務,有關 SCIM 2.0 通訊協定合規性的已知問題和解決方法
Microsoft Entra ID 可利用跨網域身分識別管理系統 (SCIM) 2.0 通訊協定規格所定義的介面,自動將使用者和群組佈建至以 Web 服務為前端的任何應用程式或系統。
使用跨網域身分識別管理系統 (SCIM) 將使用者和群組從 Microsoft Entra ID 自動佈建至應用程式一文中,說明了 Microsoft Entra ID 對 SCIM 2.0 通訊協定的支援,並列出其為將使用者和群組從 Microsoft Entra ID 自動佈建至支援 SCIM 2.0 的應用程式,所實作的通訊協定具體內容。
本文將說明 Microsoft Entra 使用者佈建服務目前與過去的 SCIM 2.0 通訊協定合規性問題,以及應如何解決。
了解佈建作業
佈建服務會使用作業的概念來對應用程式進行操作。 JobID 可在進度列中找到。 所有新的佈建應用程式在建立時都會使用開頭為「scim」的 jobID。 scim 作業代表的是服務目前的狀態。 如果是較舊的作業,識別碼會是「customappsso」。 此作業代表的則是服務在 2018 年時的狀態。
若使用資源庫中的應用程式,則作業通常會包含應用程式的名稱 (例如,zoom snowFlake 或 dataBricks)。 在使用資源庫的應用程式時,您可以略過此文件。 此文件主要適用於 jobID 為 SCIM 或 customAppSSO 的非資源庫應用程式。
SCIM 2.0 相容性問題和狀態
在下表中,如有任何項目標示為已修正,就表示您會發現其在 SCIM 作業中的行為已恢復正常。 我們已努力確保所做的變更具有回溯相容性。 我們的建議是,針對新的實作使用新的行為,並更新現有的實作。 請注意,不再支援 2018 年 12 月之前預設值的 customappSSO 行為。
注意
如果是在 2018 年時所做的變更,您可以還原回 customappsso 行為。 如果是 2018 之後所做的變更,則可以使用這些 URL 來還原為較舊的行為。 我們已藉由讓您能夠還原回舊的 jobID 或使用旗標,努力確保所做的變更具有回溯相容性。 不過,如先前所述,我們不建議您實作舊行為,因為已不再支援。 我們的建議是,針對新的實作使用新的行為,並更新現有的實作。
SCIM 2.0 相容性問題 | 已修正? | 修正日期 | 回溯相容性 |
---|---|---|---|
Microsoft Entra ID 要求應用程式的 SCIM 端點 URL 根目錄中必須包含「/scim」 | Yes | 2018 年 12 月 18 日 | 降級至 customappSSO |
延伸模組屬性在屬性名稱前面使用點 "." 標記法,而不是冒號 ":" 標記法 | Yes | 2018 年 12 月 18 日 | 降級至 customappSSO |
多重值屬性的修補程式要求包含無效的路徑篩選語法 | Yes | 2018 年 12 月 18 日 | 降級至 customappSSO |
群組建立要求包含無效的結構描述 URI | Yes | 2018 年 12 月 18 日 | 降級至 customappSSO |
更新 PATCH 行為以確保合規性 (例如以布林值執行,以及適當移除群組成員資格) | No | 待定 | 使用功能旗標 |
可改變 SCIM 行為的旗標
請在應用程式的租用戶 URL 中使用下面的旗標,以變更預設的 SCIM 用戶端行為。
使用下列 URL 來更新 PATCH 行為,並確保 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 系統管理中心。
瀏覽至 [身分識別] > [應用程式] > [企業應用程式]。
找到並選取現有的 SCIM 應用程式。
在您現有 SCIM 應用程式的 [屬性] 區段中,複製 [物件識別碼]。
在新的網頁瀏覽器視窗中,前往 https://developer.microsoft.com/graph/graph-explorer 並以新增應用程式所在之 Microsoft Entra 租用戶的系統管理員身分登入。
在 [Graph 總管] 中,執行下列命令以尋找您佈建作業的識別碼。 將 "[object-id]" 取代為您從第三個步驟複製的服務主體識別碼 (物件識別碼)。
GET https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs
在結果中,複製開頭為 "customappsso" 或 "scim" 的完整「識別碼」字串。
執行下列命令以擷取屬性對應設定,以便進行備份。 使用上述相同的 [object-id],並將 [job-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" 的完整「識別碼」字串。 (選擇性) 執行下列命令以重新套用舊的屬性對應,將 [new-job-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 系統管理中心。
瀏覽至 [身分識別] > [應用程式] > [企業應用程式]。
在 [建立應用程式] 區段中,建立新的 [非資源庫] 應用程式。
在新自訂應用程式的 [屬性] 區段中,複製 [物件識別碼]。
在新的網頁瀏覽器視窗中,前往 https://developer.microsoft.com/graph/graph-explorer 並以新增應用程式所在之 Microsoft Entra 租用戶的系統管理員身分登入。
在 [Graph 總管] 中,執行下列命令以初始化應用程式的佈建設定。 將 "[object-id]" 取代為您從第三個步驟複製的服務主體識別碼 (物件識別碼)。
POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs
{ templateId: "customappsso" }
返回第一個網頁瀏覽器視窗,然後針對您的應用程式選取 [佈建] 索引標籤。
如往常般完成使用者佈建設定。