本地Python连接Azure Service Bus遇CBS Authentication Expired错误求助
Azure Service Bus Python 发送消息认证过期问题排查
可能的故障原因
- Python SDK版本不兼容:
azure-servicebus和azure-identity版本不匹配,导致令牌获取/刷新逻辑异常 - 身份上下文不一致:
azd login登录的账号/订阅与C#项目使用的不一致,或多账号环境下上下文混乱 - 令牌缓存过期:本地Azure CLI缓存的令牌已失效,且Python SDK未触发自动刷新
- 权限同步延迟:Azure角色分配(如Service Bus Data Sender)未完全同步,Python SDK的权限校验逻辑更严格
排查步骤
1. 检查并升级SDK版本
执行命令查看当前安装的包版本:
pip list | findstr azure
确保 azure-servicebus >= 7.11.0、azure-identity >= 1.12.0,版本过低会导致认证逻辑缺陷。如果版本不符,执行升级:
pip install --upgrade azure-servicebus azure-identity
2. 确认身份验证上下文一致性
- 执行以下命令,确认当前azd登录的账号和订阅与C#项目使用的完全一致:
az account show - 若存在多租户/多订阅场景,在Python脚本中指定租户ID强制限定身份范围:
from azure.identity import DefaultAzureCredential credential = DefaultAzureCredential(additionally_allowed_tenants=["<你的租户ID>"]) - 尝试替换为
AzureCliCredential直接复用azd的登录上下文,验证是否是DefaultAzureCredential的问题:from azure.identity import AzureCliCredential credential = AzureCliCredential()
3. 强制刷新令牌缓存
清除Azure CLI的本地令牌缓存,重新登录后再测试:
az account clear azd login
4. 验证权限配置
- 确认当前登录账号已被分配Service Bus Data Sender角色(或更高权限的Service Bus Data Owner)
- 若刚配置角色,等待5-10分钟让Azure权限同步完成后再测试
5. 用连接字符串快速验证
暂时使用Service Bus的连接字符串替代身份认证,排除身份逻辑问题:
from azure.servicebus import ServiceBusClient, ServiceBusMessage connection_string = "<你的Service Bus连接字符串>" servicebus_client = ServiceBusClient.from_connection_string(connection_string) q_name = "xxx" with servicebus_client.get_queue_sender(queue_name=q_name) as sender: sender.send_messages(ServiceBusMessage("Hello Rithwik"))
内容的提问来源于stack exchange,提问作者Thomas Segato
相关产品推荐
相关产品推荐

