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

Azure Service Bus报错:Token issuer无效,SpringBoot连接问题求助

问题排查:Azure Service Bus连接401 InvalidIssuer错误

错误信息

Failed to create receive link test_cd989b_1701894453220
status-code: 401, status-description: InvalidIssuer: Token issuer is invalid.
TrackingId:fbfe2a23-dec8-4d1f-b695-4ce9548b8c9a_G31, SystemTracker:NoSystemTracker,
Timestamp:2023-12-06T20:27:37, errorContext[NAMESPACE: -. ERROR CONTEXT: N/A, PATH: $cbs, REFERENCE_ID:
cbs:receiver, LINK_CREDIT: 0]

问题代码

public ServiceBusReceiverAsyncClient getSBAsyncClient() {
    ServiceBusReceiverAsyncClient asyncReceiver = new ServiceBusClientBuilder()
            .credential("-", credential)
            .receiver()
            .disableAutoComplete()
            .queueName("test")
            .buildAsyncClient();

    Disposable subscription = asyncReceiver.receiveMessages()
            .flatMap(message -> {
                System.out.printf("Received Seq #: %s%n", message.getSequenceNumber());
                System.out.printf("Contents of message as string: %s%n", message.getBody());

                // Explicitly settle the message using complete, abandon, defer, dead-letter, etc.
                return asyncReceiver.complete(message);

            })
            .subscribe(unused -> {
                    }, error -> System.out.println("Error occurred: " + error),
                    () -> System.out.println("Receiving complete."));

    return asyncReceiver;
}

错误原因及解决方法

1. 命名空间参数无效

代码中.credential("-", credential)的第一个参数为Service Bus命名空间,当前填的"-"是无效值。Azure无法识别空/无效命名空间,直接导致令牌颁发者验证失败。

  • 解决:替换为你的Azure Service Bus命名空间全称(格式:{namespace}.servicebus.windows.net)。

2. DefaultAzureCredential身份配置错误

DefaultAzureCredential会按顺序尝试多种身份验证方式(本地Azure CLI、环境变量、托管标识等),若当前使用的身份没有配置Service Bus的访问权限,或令牌颁发者与命名空间不匹配,会触发该错误。

  • 解决:
    • 本地开发时,确保Azure CLI已登录正确Azure账号,且账号拥有Azure Service Bus Data Receiver及以上权限。
    • 使用环境变量时,检查AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID配置正确,且对应服务主体拥有Service Bus的访问权限。
    • Azure托管环境(如App Service)中,启用系统/用户分配托管标识,并给该标识分配Service Bus相关权限。

3. 令牌受众不匹配

DefaultAzureCredential默认请求的令牌受众可能不符合Service Bus要求,导致颁发者验证失败。

  • 解决:构建credential时指定Service Bus的受众URL(格式:https://{namespace}.servicebus.windows.net/.default):
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
TokenCredential scopedCredential = new AzureAuthorityHostCredentialAdapter(credential, "https://{your-namespace}.servicebus.windows.net/.default");

4. 云环境区域不匹配

若Service Bus部署在非全球Azure云(如中国区、政府云),DefaultAzureCredential默认使用全球云颁发者URL,会导致不匹配。

  • 解决:构建DefaultAzureCredential时指定对应云环境的AuthorityHost:
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
        .authorityHost(AzureAuthorityHosts.AZURE_CHINA) // 根据实际环境选择
        .build();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:31