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

使用Resource Token调用Azure Cosmos DB REST API报403 Forbidden问题

Azure Cosmos DB Resource Token 调用REST API返回403 Forbidden的解决方案

问题原因分析

你的代码中REST调用失败主要有两个关键问题:

  • Authorization头错误编码:Resource Token本身已是符合格式的授权字符串,无需额外URL编码,编码后会导致Cosmos DB无法正确解析令牌。
  • 缺少分区键请求头:你的权限绑定到了特定分区键MyPartitionKey,REST调用必须显式指定x-ms-documentdb-partitionkey头,否则Cosmos DB无法验证分区级权限。

修复后的REST调用代码

将原代码中REST测试部分替换为以下代码:

//REST Client TEST
using (var client = new System.Net.Http.HttpClient())
{
    string response = string.Empty;
    string verb = "POST";
    string resourceLink = string.Format("dbs/{0}/colls/{1}/docs", databaseId, collectionId);

    client.DefaultRequestHeaders.Add("x-ms-date", DateTime.UtcNow.ToString("r"));
    client.DefaultRequestHeaders.Add("x-ms-version", "2020-07-15");
    client.DefaultRequestHeaders.Add("x-ms-documentdb-isquery", "True");
    // 添加分区键头,匹配权限绑定的分区键
    client.DefaultRequestHeaders.Add("x-ms-documentdb-partitionkey", "\"MyPartitionKey\"");

    try
    {
        // 直接使用原始Resource Token,不需要URL编码
        client.DefaultRequestHeaders.Remove("authorization");
        client.DefaultRequestHeaders.Add("authorization", resourceToken);

        var qry = new SqlQuerySpec { query = "SELECT * FROM c where c.Aid = 'MyPartitionKey'" };
        var r = client.PostWithNoCharSetAsync(new Uri(baseUri, resourceLink), qry).Result;

        Console.WriteLine(r.Content.ReadAsStringAsync().Result);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

关键修复点说明

  1. 移除Resource Token的URL编码:
    原代码中authHeader = Uri.EscapeDataString(resourceToken);是错误操作,Resource Token格式为type=resource&ver=1.0&sig=xxx,编码会转义特殊字符,导致Cosmos DB无法识别令牌,直接使用原始resourceToken即可。

  2. 添加分区键请求头:
    由于权限基于分区键创建,REST调用必须通过x-ms-documentdb-partitionkey头指定对应分区键值,注意值需要用双引号包裹(例如"MyPartitionKey"),这是Cosmos DB REST API的强制要求。

验证结果

修复后,REST调用将和SDK一样成功返回数据,不会再出现403权限不足的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:15:04