诊断和排查 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 的性能准则。