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

Azure Cloud Service Worker Role项目初始化DocumentDB时授权令牌错误

解决Azure Worker Role中DocumentDB初始化的授权令牌错误

我之前调试Worker Role项目时也碰到过一模一样的问题——同样的代码在Web API和Console里跑的好好的,一到Worker Role里就报这个授权令牌错误。结合我的排查经验,给你几个大概率能解决问题的方向:

1. 优先检查虚拟机时钟同步

Azure Worker Role运行的虚拟机如果和UTC时间有偏移,就会触发DocumentDB的签名时间校验失败。虽然Azure默认会同步时钟,但偶尔会出现实例时钟漂移的情况:

  • 可以远程登录到Worker Role实例,检查系统时间是否和UTC一致;
  • 如果不想远程操作,也可以在代码里临时放宽时间校验(仅用于排查,不推荐长期使用):
var client = new DocumentClient(new Uri(endpointUri), primaryKey, new ConnectionPolicy
{
    RequestTimeout = TimeSpan.FromSeconds(30),
    EnableEndpointDiscovery = true,
    RetryOptions = new RetryOptions
    {
        MaxRetryAttemptsOnThrottledRequests = 5,
        MaxRetryWaitTimeInSeconds = 30
    },
    // 临时允许5分钟的时间偏移
    ClockSkew = TimeSpan.FromMinutes(5)
});

2. 确认配置读取的正确性

Worker Role的配置加载机制和Web API/Console有差异,很容易出现读取不到正确密钥的情况:

  • 不要硬编码密钥,一定要用CloudConfigurationManager.GetSetting从Worker Role的配置文件(ServiceConfiguration.cscfg)里读取;
  • 检查配置文件里的DocumentDbPrimaryKey有没有多余的空格或者特殊字符,复制粘贴密钥时经常会不小心带进去;
  • 确保在初始化DocumentDB客户端之后才去访问仓库,避免配置还没加载完成就生成请求签名。

3. 核对资源路径的准确性

错误信息里提到了get colls dbs/MyD...,说明签名生成时用的资源路径可能不完整:

  • 检查数据库名称是不是拼写正确,有没有少写字符;
  • 如果是手动构造请求(不是用官方SDK),要确认HTTP方法、资源类型、资源路径完全符合DocumentDB的协议规范,比如获取集合的路径应该是dbs/{db-id}/colls,不能有拼写错误。

4. 升级Cosmos DB SDK版本

旧版本的DocumentDB SDK在Worker Role环境下可能存在签名生成的兼容性问题,建议直接升级到最新的Microsoft.Azure.Cosmos包(现在DocumentDB已经改名为Cosmos DB了),并且保证和Web API/Console项目里用的版本一致。

5. 排查网络防火墙规则

虽然Web API和Console能访问,但Worker Role可能处于不同的虚拟网络中,被Cosmos DB的防火墙拦截:

  • 登录Azure门户,检查Cosmos DB账户的防火墙设置,确保允许Worker Role所在的虚拟网络或者实例IP地址访问;
  • 可以临时设置为允许所有IP访问,验证是不是防火墙的问题,之后再改回严格的规则。

一般来说,前两个原因是最常见的,先从这两点入手排查,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:59:38