【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

路邊兩盞燈發表於2021-05-16

問題描述

在先前的一篇博文中,介紹瞭如何使用Microsoft Graph API來建立Azure AD使用者(博文參考:【Azure Developer】使用Microsoft Graph API 如何批量建立使用者,使用者屬性中需要包含自定義欄位(如:Store_code,Store_name等),但是在呼叫建立AAD使用者之前,因為請求的Header中必須包含Authorization:Bearer {token}值。

在中國區獲取Graph API的Authorization可以參考呼叫專用的API來獲取身份驗證的Token:

###post 請求:

https://login.partner.microsoftonline.cn/<tenantID>/oauth2/token 

###body 資訊: 

grant_type: client_credentials #固定值 
resource: https://microsoftgraph.chinacloudapi.cn/ #固定值 
client_secret: AAD 金鑰 
client_id: AAD 客戶端ID #固定值

PS: 除固定值外,其他值都需要在Azure門戶的AAD所註冊的應用中獲取(如不知如何獲取,可參考博文:【Azure Developer】使用Postman獲取Azure AD中註冊應用程式的授權Token,及為Azure REST API設定Authorization

成功使用Postman獲取到Access Token截圖示例:

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

 

但是在成功的走出第一步後,接下來呼叫 API 建立User時,接連獲取到如下的三個錯誤:

1){ "code": "InvalidAuthenticationToken", "message": "Signing key is invalid.",  }

2){ "code": "Authorization_RequestDenied", "message": "Insufficient privileges to complete the operation.",  }

3){ "code": "Request_BadRequest", "message": "The domain portion of the userPrincipalName property is invalid. You must use one of the verified domain names in your organization.",  }

 

問題一:Signing key is invalid

錯誤截圖:

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

分析Signing Key is invalid錯誤,是因為所獲取的Token在請求時驗證無效,但是Token明明是通過 https://login.partner.microsoftonline.cn/<tenantID>/oauth2/token 獲取的。在檢查在Users的API URL時,發現使用的為官網(https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http)中的graph.microsoft.com(Global Azure Graph endpoint),而它和Token的請求URL不是同一個Azure環境(中國區Azure)。所以這裡需要修改users的API為: https:/ /microsoftgraph.chinacloudapi.cn/v1.0/users 

PS: 在使用AAD User時,一定要非常留意所使用的Azure環境,根據環境決定所請求的Endpoint,這可以避免很多錯誤。

 【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

 

 Source:https://docs.azure.cn/zh-cn/articles/guidance/developerdifferences?toc=%2fguides%2fdeveloper%2ftoc.json#check-endpoints-in-azure

 

問題二:Insufficient privileges to complete the operation

 錯誤截圖:

 【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

出現“Insufficient privileges to complete the operation”報錯的原因是Clinet (即在AAD中所註冊的Application) 沒有執行此Users API的許可權,需要到門戶中按照文件要求授予相應的許可權才可以。

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

 

(Source: https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http#permissions

授予Application的許可權步驟有三:

1)進入AAD的Application 頁面,選擇“API 許可權” ——> 點選“新增許可權” ——> 選擇 “Microsoft Graph”

2)選擇應用程式許可權,新增 "Microsoft Graph"的 User.ReadWrite.All、Directory.ReadWrite.All

3)完成第二步後,需要用管理員賬號登入Azure,來”代表Microsoft授予管理員同意“操作

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

 

 

問題三:The domain portion of the userPrincipalName property is invalid

錯誤截圖:

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

這個 "The domain portion of the userPrincipalName property is invalid".表明引數userPrincipalName的domain部分要和AAD中組織(tenant)名稱中的名稱一致。

contoso.onmicrosoft.com這個引數是官方文件的示例所用,並不是正確的一個組織域名。所以需要在AAD門戶頁面的概述中看到正確的域名:如:

【Azure Developer】使用Microsoft Graph API 批量建立使用者,先後遇見的三個錯誤及解決辦法

 

 

參考資料

檢查 Azure 中的終結點https://docs.azure.cn/zh-cn/articles/guidance/developerdifferences?toc=%2fguides%2fdeveloper%2ftoc.json#check-endpoints-in-azure

建立使用者https://docs.microsoft.com/zh-cn/graph/api/user-post-users?view=graph-rest-1.0&tabs=http#permissions

 

相關文章