.NET Aspire集成测试中OpenIddict Introspection服务发现失效排查
问题原因与解决方案
你的问题出在OpenIddict Introspection客户端不会自动继承全局的HttpClient配置——哪怕你在ConfigureHttpClientDefaults里开启了服务发现,OpenIddict内部创建的HttpClient实例也不会自动应用这些设置,导致无法将https://accounts解析到随机端口的服务实例,最终出现连接拒绝错误。
解决步骤
方案1:给OpenIddict的HttpClient显式启用服务发现
直接在配置OpenIddict时,为其使用的HttpClient添加服务发现支持:
options.SetIssuer("https://accounts"); options.UseIntrospection(); options.UseSystemNetHttp(httpClientBuilder => { httpClientBuilder.AddServiceDiscovery(); });
方案2:使用命名HttpClient复用配置
先注册一个带有服务发现的命名HttpClient:
builder.Services.AddHttpClient("AccountsIntrospectionClient") .AddServiceDiscovery();
然后让OpenIddict使用这个命名客户端:
options.SetIssuer("https://accounts"); options.UseIntrospection(); options.UseSystemNetHttp("AccountsIntrospectionClient");
额外检查项
- 确保集成测试的Aspire应用配置中,已将认证服务(
accounts)添加为项目依赖,Aspire会自动为其注册包含随机端口的服务发现条目。 - 确认开发证书配置正常,避免HTTPS连接因证书验证失败(Aspire集成测试通常会自动处理开发证书,若使用自定义证书需额外配置)。
内容的提问来源于stack exchange,提问作者James Hancock
相关产品推荐
相关产品推荐

