You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cosmos DB REST API删除文档时遇Unauthorized错误求助

排查Cosmos DB REST API删除文档Unauthorized错误的思路
  • 核对授权签名的资源参数:
    创建文档时,resourceLink用的是集合完整路径(如dbs/你的DB名/colls/你的集合名),resourceType为docs;但删除单个文档时,resourceLink必须替换为目标文档的完整路径(如dbs/你的DB名/colls/你的集合名/docs/你的文档ID),resourceType仍为docs。检查你生成签名时传入的$sResourceLink是否复用了创建时的集合路径,这是最常见的授权失败原因。

  • 校验分区键的格式与类型:
    重点检查x-ms-documentdb-partitionkey的实际值:

    • 用Write-Host $sHeader["x-ms-documentdb-partitionkey"]输出确认,PowerShell里[ ""$PartitionKey"" ]的写法是否生成了[ "分区键值" ]的标准JSON数组格式。
    • 分区键的类型必须和文档存储的完全一致:如果文档里分区键是数值型,就不能传字符串格式(比如[123]而非["123"])。
  • 检查自定义签名生成函数的逻辑:
    Generate-MasterKeyAuthorizationSignature是自定义函数,重点排查:

    • 是否严格按照Cosmos规则拼接签名字符串:格式应为verb + "\n" + resourceType + "\n" + resourceLink + "\n" + date.ToLower() + "\n" + "" + "\n"(注意日期要转成小写的RFC1123格式)。
    • 生成签名用的$sDateTime是否和请求头里的x-ms-date完全一致?避免毫秒精度或格式差异导致签名无效。
    • 函数是否正确保留了DELETE的大写动词,没有被转成小写。
  • 验证请求URI的正确性:
    检查拼接后的$sUri是否有多余斜杠(比如sResourceLink结尾带/,导致.../docs//DocId),或者文档ID包含特殊字符未编码?可以用[Uri]::EscapeDataString($DocId)对文档ID做URL编码后再拼接。

  • 排查冗余请求头:
    DELETE请求不需要Content-Type头(无请求体),当前代码里传了application/json,虽理论上不影响,但可以尝试去掉这个参数后重试,避免不必要的头干扰签名验证。


内容的提问来源于stack exchange,提问作者coupland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:43:18