升级到 v8 后,MassTransit + Azure 服务总线身份验证问题

问题描述 投票:0回答:1

我有一个 dotnet 6 应用程序,我正在尝试 从 MassTransit v7 升级到 v8 但是当我这样做时,我在 Startup.cs 中面临一个 Azure 身份验证问题 (

Azure.Identity.AuthenticationFailedException: ManagedIdentityCredential authentication failed: Service request failed. 400, Bad Request
) ,在尝试为 Azure KeyVault 获取新令牌以构建应用程序配置时 (
IConfiguration
)。

config.AddAzureKeyVault(
  new SecretClient(new Uri("my-keyvault-uri"), new ManagedIdentityCredential("my-az-client-id")),
  new KeyVaultSecretManager());

这在 MassTransit v7 上一直运行良好,但是一旦我将它更新到 8.0.14,我就开始遇到这个身份验证问题并且无法启动该应用程序。我更新了我们的NuGet包

<PackageReference Include="MassTransit" Version="7.3.0" />
<PackageReference Include="MassTransit.AspNetCore" Version="7.3.0" />
<PackageReference Include="MassTransit.Azure.ServiceBus.Core" Version="7.3.0" />
<PackageReference Include="MassTransit.Extensions.DependencyInjection" Version="7.3.0" />
<PackageReference Include="MassTransit.RabbitMQ" Version="7.3.0" />

<PackageReference Include="MassTransit" Version="8.0.14" />
<PackageReference Include="MassTransit.Azure.ServiceBus.Core" Version="8.0.14" />
<PackageReference Include="MassTransit.RabbitMQ" Version="8.0.14" />
<PackageReference Include="MassTransit.Newtonsoft" Version="8.0.14" />

如果有帮助,这是我们的MassTransit核心配置

services.AddMassTransit(cfg =>
  {
    cfg.SetKebabCaseEndpointNameFormatter();

    cfg.UsingAzureServiceBus((context, busCfg) =>
      {
        busCfg.Host("Endpoint=sb://XXXXXXX.servicebus.windows.net/;SharedAccessKeyName=YYYYYY;SharedAccessKey=ZZZZZZ");
        ConfigureMassTransitBus(context, busCfg, true);
      });
    cfg.AddServiceBusMessageScheduler();
});

到目前为止我尝试了什么(没有运气):

  • 仔细遵循 MassTransit v7 到 v8 迁移指南
  • 查看 Stack overflow、Github 等类似问题
  • 在 MassTransit 主机配置中将我们的 ManagedIdentityCredentials 作为 TokenService 注入
  • 升级项目中任何其他与 Azure 身份相关的包
  • 可能与Mass transit注入默认的IHostedService有关,但我还是找不到根本原因

我期待:

  • 一切正常,公共交通能够正确连接到 Azure 服务总线,从 Azure KeyVault 构建配置时没有问题

有人遇到类似的问题吗?我试图仔细审查 MassTransit v7 到 v8 的迁移,也尝试寻找类似的问题,但仍然没有成功。也许我遗漏了一些东西,任何帮助我解决可能问题的帮助都将非常受欢迎。非常感谢您的宝贵时间和提前帮助!

*PS:如果需要更多细节,我很乐意分享。我只是想让描述尽可能简单。 *

.net azure azureservicebus masstransit
1个回答
0
投票

如果您仅指定服务总线命名空间(连接字符串中没有 SharedAccessKey/KeyName),MassTransit v8 将自动使用托管标识。不确定您的

ConfigureMassTransitBus
方法中还有什么,但主机只能配置一次(并且多次调用它会丢弃任何以前的主机设置)。

© www.soinside.com 2019 - 2024. All rights reserved.