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

本地Python连接Azure Service Bus遇CBS Authentication Expired错误求助

Azure Service Bus Python 发送消息认证过期问题排查

可能的故障原因

  1. Python SDK版本不兼容:azure-servicebus 和 azure-identity 版本不匹配,导致令牌获取/刷新逻辑异常
  2. 身份上下文不一致:azd login 登录的账号/订阅与C#项目使用的不一致,或多账号环境下上下文混乱
  3. 令牌缓存过期:本地Azure CLI缓存的令牌已失效,且Python SDK未触发自动刷新
  4. 权限同步延迟: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:22:37