使用托管身份对接Azure Service Bus时报401未授权错误问题咨询
问题根因
报错InvalidIssuer: Token issuer is invalid的核心原因是凭证获取到的令牌所属租户ID,和你的Azure Service Bus所在的租户ID不匹配。DefaultAzureCredential默认会读取当前账号的默认租户生成令牌,如果你登陆的账号同时加入了多个Azure租户,就会出现颁发者校验不通过的401错误。
解决步骤
1. 确认目标租户ID
进入Azure门户的Service Bus命名空间概览页,找到该资源所属的租户ID,记录该值备用。
2. 给凭证指定租户ID
修改凭证初始化代码,显式传入Service Bus对应的租户ID即可:
var creds = new Azure.Identity.DefaultAzureCredential(new DefaultAzureCredentialOptions { TenantId = "替换为你刚才记录的租户ID" });
如果单独使用AzureCliCredential也可以用同样的方式指定租户:
var creds = new Azure.Identity.AzureCliCredential(new AzureCliCredentialOptions { TenantId = "替换为你刚才记录的租户ID" });
3. 确认角色权限分配
要确认你当前登陆的Azure账号,在Service Bus命名空间下被分配了对应数据权限:
- 发送消息需要Azure Service Bus 数据发送者角色
- 接收消息需要Azure Service Bus 数据接收者角色
注意不要只分配所有者、参与者这类管理角色,这类角色默认没有Service Bus的数据读写权限。
可选本地验证
你可以先通过Azure CLI验证令牌获取是否正常:
# 切换到Service Bus所在的订阅 az account set --subscription 你的订阅ID # 申请Service Bus资源的访问令牌 az account get-access-token --resource https://servicebus.azure.net
如果上述命令可以正常返回令牌,再运行你的代码即可正常调用。
内容的提问来源于stack exchange,提问作者user12585721
相关产品推荐
相关产品推荐

