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



我有一个dotnet 6应用程序我正试图从masstransv7升级到v8但是当我这样做的时候,我面临着一个Azure认证问题(Azure.Identity.AuthenticationFailedException: ManagedIdentityCredential authentication failed: Service request failed. 400, Bad Request)在Startup.cs中,当试图获得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();
});
private void ConfigureMassTransitBus(
IBusRegistrationContext context,
IBusFactoryConfigurator busCfg)
{
busCfg.UseNewtonsoftJsonSerializer();
busCfg.ReceiveEndpoint("my-endpoint", e => {
e.ConfigureConsumer<MyClass>(context);
e.UseMessageRetry(r => { r.Immediate(1); });
e.UseDelayedRedelivery(r => r.Intervals(TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(15), TimeSpan.FromMinutes(60)));
});
busCfg.UseServiceBusMessageScheduler();
}

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

  • 仔细遵循masstransv7到v8的迁移指南
  • 看看Stack overflow, Github等的类似问题
  • 将我们的manageddentitycredentials作为TokenService注入到masstrtransit主机配置中
  • 升级项目中任何其他与Azure身份相关的包
  • 也许这与公共交通如何注入默认的IHostedService有关,但我仍然找不到根本原因

我希望:

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

是否有人遇到类似的问题?我试着仔细检查MassTransit v7到v8的迁移,也试着寻找类似的问题,但仍然没有运气。也许我错过了什么,任何帮助,指出我可能的问题将是更受欢迎的。非常感谢您的时间和提前的帮助!

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

如果您只指定服务总线命名空间(连接字符串中没有SharedAccessKey/KeyName),则MassTransit v8将自动使用托管身份。不确定在你的ConfigureMassTransitBus方法中还有什么,但是主机只能配置一次(并且多次调用它会丢弃任何以前的主机设置)。

最新更新