使用ClientSecretCredential连接Azure Service Bus认证失败求助
Response was not set, make sure SendAsync was called 报错详情
Azure.Identity.AuthenticationFailedException: ClientSecretCredential authentication failed: Response was not set, make sure SendAsync was called
涉事代码
var adminClient = new ServiceBusAdministrationClient( mySettings.AzureServiceBus.Endpoint, new ClientSecretCredential(mySettings.AzureServiceBus.TenantId, mySettings.AzureServiceBus.ClientId, mySettings.AzureServiceBus.ClientSecret)); var exists = await adminClient.SubscriptionExistsAsync(myTopic, mySubName).ConfigureAwait(false);
环境差异
- Windows 11 + JetBrains Rider:每次运行均失败,仅偶尔在调试时查看客户端属性后能成功(无稳定规律)
- Visual Studio(同事环境)/ Visual Studio Community(本地安装后):运行完全正常
诊断线索
AzureEventSourceListener显示,向login.microsoftonline.com发送实例发现请求时抛出System.InvalidOperationException,堆栈信息与上述报错一致。
解决方法
升级Azure相关NuGet包
旧版Azure.Identity库存在HttpClient初始化的兼容性问题,会导致部分IDE环境下请求未正确触发。将Azure.Identity和Azure.Messaging.ServiceBus(含管理客户端依赖包)升级至最新稳定版本。显式指定HttpClient实例
手动创建HttpClient并传入ClientSecretCredential,规避默认工厂在Rider环境中的异常行为:var httpClient = new HttpClient(); var credentialOptions = new ClientSecretCredentialOptions { HttpClient = httpClient }; var credential = new ClientSecretCredential( mySettings.AzureServiceBus.TenantId, mySettings.AzureServiceBus.ClientId, mySettings.AzureServiceBus.ClientSecret, credentialOptions); var adminClient = new ServiceBusAdministrationClient( mySettings.AzureServiceBus.Endpoint, credential);检查Rider代理配置
确认Rider的HTTP代理设置是否与Visual Studio一致,错误的代理会阻断向login.microsoftonline.com的请求。路径:File > Settings > Appearance & Behavior > System Settings > HTTP Proxy,建议设置为Auto-detect proxy settings或匹配Visual Studio的代理配置。调整Rider调试设置
部分调试优化会干扰异步请求执行,尝试禁用Settings > Build, Execution, Deployment > Debugger > Async Stack Traces中的选项,或使用Run without Debugging(Ctrl+F5)测试是否恢复正常。清理Rider缓存
缓存损坏可能导致环境异常,执行File > Invalidate Caches...,选择Invalidate and Restart后重新运行项目。
内容的提问来源于stack exchange,提问作者fp-jcorriveau

