Vla*_*lyk 3 azure azure-sdk-.net azure-cosmosdb
从 DocumentDB 请求文档时,我偶尔会遇到 UnauthorizedException。该问题与Azure DocumentDB类似- HTTP 请求中发现的 MAC 签名与计算出的签名不同,因此我认为该问题没有解决。
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/
Run Code Online (Sandbox Code Playgroud)
更新:问题已修复,特别感谢 Andrew Liu!
很高兴听到您不再遇到此问题:)
在这里发帖是为了其他人的利益......
如果您看到这样的问题,则意味着应用程序和数据库之间存在身份验证标头不匹配。这可能是多种原因造成的……包括不正确的验证密钥、系统时钟不同步或生成验证标头方式的问题。
第一方 DocumentDB SDK
如果您使用的是 DocumentDB 的第一方客户端 SDK 之一 - 很可能是不正确的身份验证密钥或系统时钟问题...
如果这些看起来不错,那么 DocumentDB 端就有一个错误。如果您遇到问题 - 请联系我(askcosmosdb {at} microsoft.com)并提供一些活动 ID + 时间戳 + 堆栈跟踪,我可以帮助您查看问题。
休息API
标题很难放在一起......以下是构建身份验证标题的一些技巧:
除了使用基于 id 的路由时,所有参数(动词、资源类型、日期等)在签名之前都必须是小写的。
对于基于 id 的路由,您需要签署资源的完整路径(例如dbs/MyDatabase/colls/MyCollection/docs/MyDocument
);不仅仅是资源的 id(例如MyDocument
)。请注意,路径区分大小写...而所有其他参数都应小写。
密钥是 Base64 编码的。
要签名的文本应为 utf-8 编码。
生成的身份验证令牌是 SHA256 HMAC,应该是 Base64 编码的。
与所有 HTTP 标头一样,签名(包括签名令牌)应该是 URL 编码的(例如+
需要编码为%2B
)。
完整文档和示例代码,请参阅:https : //msdn.microsoft.com/en-US/library/azure/dn783368.aspx
归档时间: |
|
查看次数: |
2909 次 |
最近记录: |