Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure DocumentDB UnauthorizedException:“;HTTP请求中找到的MAC签名与计算签名不同;_Azure_Azure Cosmosdb_Azure Sdk .net - Fatal编程技术网

Azure DocumentDB UnauthorizedException:“;HTTP请求中找到的MAC签名与计算签名不同;

Azure DocumentDB UnauthorizedException:“;HTTP请求中找到的MAC签名与计算签名不同;,azure,azure-cosmosdb,azure-sdk-.net,Azure,Azure Cosmosdb,Azure Sdk .net,我偶尔会在向DocumentDB请求文档时出现未经授权的异常。这个问题看起来很相似,所以我认为这个问题没有解决 Microsoft.Azure.Documents.UnauthorizedException : Message: "The MAC signature found in the HTTP request is not the same as the computed signature. Request URI: rntbd://db5prdddc01-docdb-1.docu

我偶尔会在向DocumentDB请求文档时出现未经授权的异常。这个问题看起来很相似,所以我认为这个问题没有解决

Microsoft.Azure.Documents.UnauthorizedException : 
Message: "The MAC signature found in the HTTP request is not the same as the computed signature. 
Request URI: rntbd://db5prdddc01-docdb-1.documents.azure.com:14245/apps/35e0fabb-e03e-48d4-90ad-7b91b63c0153/services/9bb95f7b-9ad6-4128-a66a-de68279d5124/partitions/44a24d42-a85c-42cc-98c4-fc8a733245ac/replicas/130953283548138839p/

更新:问题已经解决,特别感谢Andrew Liu

很高兴听到您不再遇到此问题:)

为了其他人的利益在这里发布

如果您看到这样的问题,则表示应用程序和数据库之间存在身份验证标头不匹配。这可能是许多事情的结果。。。包括不正确的身份验证密钥、系统时钟不同步或如何生成身份验证标头的问题

第一方文档数据库SDK

如果您使用的是DocumentDB的第1方客户端SDK之一-很可能是身份验证密钥不正确或系统时钟问题

如果这些看起来不错,说明DocumentDB端有一个bug。如果您遇到问题-请联系我(askcosmosdb{at}microsoft.com),并提供一些活动ID+时间戳+堆栈跟踪,我可以帮助您查找问题

RESTAPI

标题很难组合在一起。。。以下是构造auth头的一些技巧:

  • 所有参数(动词、资源类型、日期等)在签名前都必须小写,除非使用基于id的路由

  • 对于基于id的路由,您需要对资源的完整路径进行签名(例如,
    dbs/MyDatabase/colls/MyCollection/docs/MyDocument
    );不仅仅是资源的id(例如,
    MyDocument
    )。请注意,路径区分大小写。。。然而,所有其他参数应为小写

  • 密钥是Base64编码的

  • 要签名的文本应为utf-8编码

  • 生成的身份验证令牌是SHA256 HMAC,应该是Base64编码的

  • 与所有HTTP头一样,签名(包括签名的令牌)应该是URL编码的(例如,
    +
    需要编码为
    %2B


完整文档和示例代码,请参阅:

检查静态客户端方法。可能是您错误地使用了具有只读密钥的客户端


尝试使用只读键写入时会引发该异常。

我在使用主连接字符串时遇到了相同的问题,当我将连接字符串更改为辅助连接字符串时,它对我有效


当我从“自我链接”切换到基于id的链接时,我开始意识到这一点,所以在第一次使用基于id的链接获取链接后,我现在被动地缓存“自我链接”。有时我仍然会遇到错误,但会少一些,并且我内置了自动重试功能,以便在应用程序代码中隐藏错误。当我开始发现问题时,我改变了我的系统的另一件事是,我的测试系统现在在每次测试开始时创建一个新的数据库和集合,并在测试结束时删除它。我想知道快速且频繁的创建/删除是否是造成此问题的原因。DocumentDB需要解决此问题。我已经向他们发送了我何时收到的详细信息,所以他们可能正在处理。假期结束后,团队中的某个人可能会联系您以了解您的详细信息。这可能会帮助他们专注于此。在切换到基于id的链接后,我也遇到了这个问题。嘿,我在DocumentDB团队工作。。。你能给我发一封电子邮件,告诉我更多的细节吗:andrl{at}microsoft.com一些有用的东西:1)你使用的SDK的平台+版本是什么?2) 这种情况是间歇性发生还是经常发生?3) 是否可以为异常包含活动和时间戳?这将允许我们在日志中查找和跟踪特定请求。4) 你能提供一个你想做的事情的代码片段吗?我看到了这个问题。你能帮@Andrew Liu吗?