【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)

路邊兩盞燈發表於2021-07-06

問題描述

在通過REST API的方式來管理APIM資源,需要呼叫Azure提供的management介面。而這所有的介面,都是需要有Token並且還需要正確的Token。如若不然,就會獲取到如下的錯誤:

{
    "error": {
        "code": "AuthenticationFailed",
        "message": "Authentication failed. The 'Authorization' header is missing."
    }
}

OR 

{
    "error": {
        "code": "AuthenticationFailed",
        "message": "Authentication failed."
    }
}

如在官方對API呼叫的介紹中,都是需要設定 Authorization 。

【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)

缺少Token和Token錯誤的截圖(使用Postman測試呼叫Get APIM API List的介面:GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis?api-version=2019-12-01)

【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)

 

本文就從 快速獲取Token通過AAD Authorization URL獲取Token 兩種方式進行介紹。

 

問題解決

方式一: 快速的從Azure APIM門戶中獲取Token

PS: 這個方式適用於驗證Azure Management的呼叫方式,或一次性呼叫等場景。使用的Token許可權能力由當前登入Azure門戶的使用者的許可權所決定

1)登入Azure門戶,開啟API Management服務並選中其中需要操作的APIM物件。

2)點選F12,開啟瀏覽器的開發者模式,進入Networking選項卡

3)重新整理頁面,在所有請求列表中搜尋“ management.chinacloudapi.cn ”,篩選目標請求

4)在請求的 Request Body 中發現 Authorization 值。

演示動畫:

【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing) 

方式二: 通過AAD Authorization URL獲取Token

PS:此種方式為正確的呼叫方式,通過傳送POST請求獲取Token。可以在Coding中長期使用。由在AAD:Azure Active Directory中所使用的服務主體許可權所決定。

1)登入Azure 門戶,進入AAD頁面,選中“ App Registrations ”,然後點選“ + New registration ”按鈕

2)輸入新註冊應用的名稱 “ apimDevOpsUser ”,點選“ Register ”按鈕。註冊成功後,儲存下“Tenant”和“Application”值。

3)設定應用客戶端密碼。選擇 “ Certificates & secrets ” 目錄,點選“ + New client secret ”按鈕,根據提示生產新金鑰,然後複製出來儲存(PS: 此處的金鑰只有第一次建立時可見,此後全是*號代替,所以務必儲存下來)

4)回到APIM資源的許可權設定頁面(IAM), 為新的註冊應用賦予 Contributor 許可權。(可根據具體需要賦予許可權)

6)在Postman中使用POST方式呼叫介面:https://login.chinacloudapi.cn/{{TENANT}}/oauth2/v2.0/token

Request Type:
POST

Request URL:
https://login.chinacloudapi.cn/{{TENANT}}/oauth2/v2.0/token

Request Body:
tenant:{{TENANT}}
client_id:{{CLIENT}}
scope:https://management.chinacloudapi.cn/.default
grant_type:client_credentials
client_secret:{{SECRETS}}

PS: scope是非常重要的一個引數,如APIM資源的API的URL為"https://management.chinacloudapi.cn/subscriptions/{...",所以正確的SCOPE是“ https://management.chinacloudapi.cn/.default 

7) 傳送請求,獲取正確的Token。

演示動畫:

 【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)

獲取Token後的正確呼叫截圖:

GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis?api-version=2019-12-01

Authorization: Bearer ....................

【Azure API 管理】解決呼叫REST API操作APIM(API Management)需要認證問題(Authentication failed, The 'Authorization' header is missing)

 

 

 

參考資料

APIM REST API Document : Apis - Get -- https://docs.microsoft.com/en-us/rest/api/apimanagement/2019-12-01/apis/get

 

相關文章