我有一个 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 的迁移,也尝试寻找类似的问题,但仍然没有成功。也许我遗漏了一些东西,任何帮助我解决可能问题的帮助都将非常受欢迎。非常感谢您的宝贵时间和提前帮助!
*PS:如果需要更多细节,我很乐意分享。我只是想让描述尽可能简单。 *
如果您仅指定服务总线命名空间(连接字符串中没有 SharedAccessKey/KeyName),MassTransit v8 将自动使用托管标识。不确定您的
ConfigureMassTransitBus
方法中还有什么,但主机只能配置一次(并且多次调用它会丢弃任何以前的主机设置)。