共用方式為


叫用 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 意見反應社群提交產品意見反應。