Azure Cosmos DB for NoSQL 中未經授權的例外狀況,例如 HTTP 401 錯誤,通常會在要求中的 MAC 簽章不符合預期值時發生。 不正確的金鑰、不完整的金鑰輪換或使用唯讀金鑰進行寫入操作通常是導致此錯誤訊息的原因。
癥狀
未經授權例外狀況的常見症狀是收到 HTTP 401 錯誤訊息。 此錯誤表示要求未正確驗證。
HTTP 401: The MAC signature found in the HTTP request isn't the same as the computed signature.
對於較舊的軟體開發套件 (SDK),例外狀況可能會顯示為無效的 JSON 例外狀況,而不是正確的 401 未經授權的例外狀況。 較新的 SDK 會處理此案例,並顯示有效的錯誤訊息。
原因
當您要求中的驗證簽章 (MAC) 不符合 Azure Cosmos DB 預期時,就會發生此錯誤。 常見原因包括使用錯誤的金鑰、不完整的金鑰輪換或嘗試使用唯讀金鑰執行寫入操作。 此不符會防止 Cosmos DB 驗證您的身分識別,導致 HTTP 401 未經授權的錯誤。
解決方法:等待按鍵輪換完成
如果您在輪換帳戶金鑰後立即遇到 401 MAC 簽章錯誤,請套用此解決方案。 Azure Cosmos DB 中的金鑰輪替可能需要幾秒鐘到幾天的時間,視帳戶大小而定。
請確定您的應用程式會等到金鑰輪換程式完全完成,然後再使用新金鑰進行驗證。 輪換完成後,錯誤應該會自動解決。
解決方案:修正設定錯誤的金鑰
如果您使用特定金鑰的所有請求中一再收到 401 MAC 簽名錯誤,請參考此解決方案。 此案例通常表示金鑰在應用程式組態中不正確或不完整。
驗證應用程式中的金鑰是否與正確的帳戶金鑰相符,並確保複製整個金鑰而不截斷。
解決方案:使用讀/寫鍵進行寫入操作
如果 401 MAC 簽章錯誤僅在寫入操作期間發生,而讀取請求成功,請套用此解決方案。 此案例表示應用程式正在使用唯讀金鑰進行寫入動作。
更新您的應用程式,以使用讀取/寫入金鑰或授權機制,並對所有寫入作業具有寫入存取權。
解決方案:等待容器建立完成
如果在建立容器後立即出現 401 MAC 簽章錯誤,請選擇此解決方案,尤其是在刪除容器並以相同名稱重新建立容器時。
請確定您的應用程式會等到容器建立程式完全完成,然後再嘗試存取容器或執行容器上的作業。
相關內容
- 針對使用 Azure Cosmos DB .NET SDK 時發生的問題,進行診斷和疑難排解。
- 了解 .NET v3 和 .NET v2 的效能指導方針。
- 針對使用 Azure Cosmos DB Java v4 SDK 時發生的問題進行診斷和疑難排解。
- 了解 Java v4 SDK 的效能指導方針。