叫用 API 時未經授權的錯誤 (401)
請參閱 Azure API 管理 疑難解答系列文章,這是實驗室的第三個案例。 請確定您已依照此指示遵循實驗室設定指示,以重新建立問題。
原始產品版本:API 管理 服務
原始 KB 編號: 4464930
注意
本篇文章實用嗎? 您的輸入對我們很重要。 請使用此頁面上的 [ 意見反應 ] 按鈕,讓我們知道這篇文章為您運作得有多好,或我們如何加以改善。
徵兆
Echo API 突然開始擲回不同類型的 HTTP 401 - 在叫用作業時未經授權的錯誤。 建立資源和擷取資源作業會顯示此錯誤訊息:
{
“statusCode”: 401,
“message”:“由於訂用帳戶密鑰無效而拒絕存取。 請務必為作用中的訂用帳戶提供有效的密鑰。」
}
而其餘作業則顯示
{
“statusCode”: 401,
“message”:“因為缺少訂用帳戶密鑰而拒絕存取。 請務必在向 API 提出要求時包含訂用帳戶密鑰。
}
所有作業的預期 HTTP 回應碼為 200,不過響應主體會隨著後端 API 一律會回應您除了標頭之外,以要求主體傳送的任何內容也會有所不同。
疑難排解步驟
為了取得 API 的存取權,開發人員必須先訂閱產品。 當他們訂閱時,他們會取得訂閱密鑰,該密鑰會作為要求標頭的一部分傳送,適用於該產品中的任何 API。 Ocp-Apim-Subscription-Key 是針對與此 API 相關聯之產品的訂用帳戶密鑰所傳送的要求標頭。 金鑰會自動填入。
關於因為訂用帳戶金鑰無效而拒絕存取的錯誤。請務必為作用中的訂用帳戶提供有效的密鑰,很明顯您在叫用建立資源和擷取資源作業時,傳送了 Ocp-Apim-Subscription-Key 要求標頭的錯誤值。
您可以從APIM開發人員入口網站查看特定產品的訂用帳戶密鑰,方法是在登入後流覽至 [配置檔 ] 頁面,如下所示。
選取 [ 顯示 ] 按鈕,以查看您已訂閱之個別產品的訂用帳戶密鑰。
如果您檢查要從 [測試] 索引標籤傳送的標頭,您會發現 Ocp-Apim-Subscription-Key 要求標頭的值錯誤。 您可能想知道可能的方式,因為 APIM 會自動以正確的訂用帳戶密鑰填入此要求標頭。
讓我們檢查 [設計] 索引標籤下 [建立資源] 和 [擷取資源作業] 的前端定義。仔細檢查時,您會注意到這些作業在 [標頭] 索引卷標下新增的 Ocp-Apim-Subscription-Key 要求標頭有錯誤的硬式編碼值。
您可以將其移除,這應該可解決無效的訂用帳戶密鑰問題,但仍會遺失訂用帳戶密鑰錯誤。
您可能會收到下列錯誤訊息:
HTTP/1.1 401 未經授權
內容長度:152
Content-Type:應用程式/json
日期:星期日, 29 七月 2018 14:29:50 GMT
不同: Origin WWW-Authenticate: AzureApiManagementKey realm=“https://pratyay.azure-api.net/echo
,name=”Ocp-Apim-Subscription-Key“,type=”header“ {
“statusCode”: 401,
“message”:“因為缺少訂用帳戶密鑰而拒絕存取。 請務必在向 API 提出要求時包含訂用帳戶金鑰。」 }移至 Echo APIsettings,並檢查它是否與任何可用的產品相關聯。 如果沒有,您必須將此 API 與產品產生關聯,才能取得訂用帳戶密鑰。
開發人員必須先訂閱產品,才能取得 API 的存取權。 當他們訂閱時,就能取得適用於該產品中任何 API 的中訂用帳戶金鑰。 如果您建立了 APIM 執行個體,您就已經是系統管理員,因此根據預設,您已訂閱每一個產品。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。