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

在GitLab流水线中使用Testcontainers运行Keycloak时遇HTTPS要求错误

解决GitLab流水线中Testcontainers+Keycloak的HTTPS强制要求问题

问题分析

本地用start-dev启动Keycloak容器测试正常,但GitLab流水线中调用GetDiscoveryDocumentAsync时触发HTTPS required错误,核心原因是:

  • Keycloak在容器网络环境下自动检测的Base URL可能被识别为HTTPS(比如容器内部网络的默认配置或GitLab Runner的网络逻辑)
  • IdentityModel默认对非本地地址强制要求HTTPS

解决方案

1. 显式配置Keycloak强制使用HTTP

修改容器启动命令,添加参数禁用HTTPS严格检查并明确启用HTTP:

new ContainerBuilder()
    .WithName("Keycloak-Client-Test-" + Guid.NewGuid().ToString("D"))
    .WithImage("quay.io/keycloak/keycloak:21.0.1")
    .WithPortBinding(privateKeycloakPort, true)
    .WithResourceMapping(new FileInfo("ContainerData/clienttest-realm.json"), new FileInfo("/opt/keycloak/data/import/realm.json"))
    .WithCommand(
        "start-dev",
        "--import-realm",
        "--http-enabled=true",
        "--hostname-strict=false",
        "--hostname-strict-https=false"
    )
    .WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(r => r.ForPort(privateKeycloakPort)))
    .Build();

同时在导入的clienttest-realm.json中,给realm指定HTTP格式的发行地址:

{
  "realm": "clienttest",
  "accessTokenIssuer": "http://docker:${MAPPED_PORT}/realms/clienttest",
  "baseUrl": "http://docker:${MAPPED_PORT}/realms/clienttest",
  // 其他原有配置...
}

注:${MAPPED_PORT}可通过Testcontainers的GetMappedPort方法获取实际映射端口后动态替换。

2. 让IdentityModel允许HTTP访问

在调用发现文档接口时,显式关闭HTTPS强制要求(仅用于测试环境):

var discoveryDoc = await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
{
    Address = "http://docker:32769/realms/clienttest",
    Policy = new DiscoveryPolicy { RequireHttps = false }
});

3. 确认Testcontainers的访问地址正确性

在代码中输出容器的实际访问地址,验证是否为HTTP格式:

var keycloakContainer = // 你的容器实例
var actualBaseUrl = $"http://{keycloakContainer.Hostname}:{keycloakContainer.GetMappedPort(privateKeycloakPort)}";
// 输出到日志用于调试
Console.WriteLine($"Keycloak测试访问地址: {actualBaseUrl}");

验证步骤

  1. 应用修改后重新运行GitLab流水线测试
  2. 若仍报错,添加日志输出Keycloak返回的发现文档内容,检查issuer、authorization_endpoint等字段是否为HTTP地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:52:32