You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

curl可访问Keycloak well-known端点,.NET Core应用却无法访问

问题分析与解决

问题现象

开发机上执行curl命令能正常访问Keycloak的配置端点:

curl http://localhost:8080/realms/rest-test/.well-known/openid-configuration

但.NET Core应用启动时抛出错误:

IDX20803: Unable to obtain configuration from: 'http://localhost:8080/realms/rest-test/.well-known/openid-configuration'

应用的认证配置代码如下:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddScheme<JwtBearerOptions, CustomJwtBearerHandler>(JwtBearerDefaults.AuthenticationScheme, options => { options.RequireHttpsMetadata = false; });

核心原因

开发机上的curl是在宿主机环境执行,localhost指向你的物理机器,能访问到宿主机映射的Keycloak容器端口。但如果.NET Core应用运行在容器内,容器里的localhost指的是容器自身,而非宿主机,所以无法访问到Keycloak服务。

解决方案

1. 替换Keycloak访问地址

根据应用的运行环境,把配置里的localhost替换为以下两种地址之一:

  • 宿主机局域网IP:比如你的开发机IP是192.168.1.100,就用http://192.168.1.100:8080/realms/rest-test
  • Docker服务名(Docker Compose场景):如果Keycloak通过Compose启动且服务名为keycloak,直接用http://keycloak:8080/realms/rest-test(需确保应用和Keycloak在同一个Docker网络)

2. 更新认证配置

修改配置代码,指定正确的Keycloak地址:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddScheme<JwtBearerOptions, CustomJwtBearerHandler>(JwtBearerDefaults.AuthenticationScheme, options => 
    { 
        options.RequireHttpsMetadata = false;
        // 替换为实际的Keycloak地址
        options.Authority = "http://192.168.1.100:8080/realms/rest-test";
    });

3. 验证网络连通性

  • 若使用Docker Compose,确保应用和Keycloak服务加入同一个自定义网络(默认bridge网络也可连通,但自定义网络更稳定)
  • 进入应用容器,用curl测试Keycloak地址是否可达:
docker exec -it [你的应用容器ID] curl http://keycloak:8080/realms/rest-test/.well-known/openid-configuration

内容的提问来源于stack exchange,提问作者Tommie Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:03:17