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 的性能准则。