Share via


Azure Cosmos DB 未授權例外狀況的診斷和疑難排解

適用於:NoSQL

HTTP 401:在 HTTP 要求中找到的 MAC 簽章與計算的簽章不同。 如果您收到 401 錯誤訊息「在 HTTP 要求中找到的 MAC 簽章與計算的簽章不同」,可能是由下列情況所造成。

針對舊版 SDK,例外狀況可能會顯示為無效的 JSON 例外狀況,而不是正確的 401 未授權例外狀況。 新版 SDK 會適當地處理此情況,並提供有效的錯誤訊息。

疑難排解步驟

下列清單包含未授權例外狀況的已知原因和解決方案。

最常見的情況是金鑰未正確輪替

在金鑰輪替後不久出現 401 MAC 簽章,且最終在沒有任何變更的情況下停止。

解決方案:

金鑰已輪替,且未遵循最佳做法。 視 Azure Cosmos DB 帳戶大小而定,Azure Cosmos DB 帳戶金鑰輪替可能需要幾秒鐘到數天的時間。

金鑰設定不正確

401 MAC 簽章問題維持不變,且會發生在使用該金鑰的所有呼叫中。

解決方案:

金鑰在應用程式上的設定不正確,而且對帳戶使用了錯誤的金鑰,或未複製整個金鑰。

應用程式針對寫入作業使用了唯讀金鑰

只有建立或取代等寫入作業才會發生 401 MAC 簽章問題,讀取要求則會成功。

解決方案:

將應用程式切換為使用讀取/寫入金鑰,以允許作業成功完成。

建立容器時的競爭條件

建立容器後不久出現 401 MAC 簽章問題, 而且該問題只會發生在容器建立完畢之前。

解決方案:

在建立容器時有競爭條件。 應用程式執行個體在容器建立完成之前,嘗試存取容器。 此競爭條件最常見的情況是在執行應用程式時,刪除容器並重新建立具有相同名稱的容器。 SDK 會嘗試使用新的容器,但由於容器仍在建立中,因此沒有金鑰。

啟用大量模式

使用啟用大量模式時,會針對最佳網路效能將讀取和寫入作業最佳化,並透過專用的大量 API 傳送至後端。 如果在啟用大量模式的情況下執行讀取作業時發生 401 錯誤,通常表示應用程式使用的是唯讀金鑰

解決方案

在啟用大量模式的情況下執行作業時,搭配寫入存取權使用讀取/寫入金鑰或授權機制。

下一步