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 錯誤,通常表示應用程式使用的是唯讀金鑰。
解決方案
在啟用大量模式的情況下執行作業時,搭配寫入存取權使用讀取/寫入金鑰或授權機制。
下一步
- 針對使用 Azure Cosmos DB .NET SDK 時發生的問題,進行診斷和疑難排解。
- 了解 .NET v3 和 .NET v2 的效能指導方針。
- 針對使用 Azure Cosmos DB Java v4 SDK 時發生的問題進行診斷和疑難排解。
- 了解 Java v4 SDK 的效能指導方針。