docker - 来自 caddy 后面的 duende 的 Identityserver 在 openid 配置中有 http

标签 docker identityserver4 caddy

我正在 caddy 反向代理后面运行 duende 的身份服务器,并且两者都在 docer 容器中运行。我还在另一个要进行身份验证的容器中运行 blazor 服务器应用程序。在本地,这工作正常,但是当我在代理后面运行它们时,.well-known/openid-configuration 提供 http:// 端点,因此 blazor 应用程序可以不进行身份验证,因为它不允许通过 http 进行身份验证。 http 位于 caddy 和身份服务器之间。由于这是在机器上运行并且没有穿越邪恶的网络,所以我认为这可能没问题。我认为我需要做的是,通过 https 而不是 http 为身份服务器和代理生成证书。但我也不想一直手动生成证书或密切关注这一点。启动中的 UseHttpsRedirect() 使 caddy 无法使用我的服务,并且仅在没有证书的情况下在 443 上运行它也会中断 caddy 和身份服务器之间的调用。我还发现了一个提示,我可以在选项中将 IssuerUri 设置为 https,但这不会影响其他端点,因此我仍然无法进行身份验证,因为在openid 配置仍然有 http 端点(发行者除外)

有人知道我该如何做到这一点而不是手动创建证书吗?

球童文件:

identity.fading-flame.com {
    reverse_proxy http://identity-server-prod
}

IS 启动

services.AddIdentityServer(options =>
                {
                    options.IssuerUri = $"https://{Environment.GetEnvironmentVariable("IDENTITY_BASE_URI")}";
                    options.EmitStaticAudienceClaim = true;
                })

或者对于球童来说可能是类似的东西? Identityserver4 openid-configuration omits host port running nginx reverse proxy

最佳答案

好吧,我在 GH 上发现了一个与 nginx 类似的线程,但答案仍然是与 caddy 一起工作。

https://github.com/IdentityServer/IdentityServer4/issues/324#issuecomment-324133883

基本上,在身份服务器中间件之前,我有这个:

    app.Use((context, next) =>
    {
        context.Request.Scheme = "https";
        return next();
    });
    
    app.UseIdentityServer();

然后 openid 配置返回 https 端点,一切都很好。我仍然缺少的是 blazor 服务器应用程序的同样的东西,因为我也使用那里的身份验证框架,并且重定向 url 是 http ,因为与 caddy 的原因相同。因此,在 blazor 应用程序中,这修复了来自身份服务器的回调,很确定它必须在身份验证之前,但我没有测试它:

    app.Use((context, next) =>
    {
        context.Request.Scheme = "https";
        return next();
    });
    
    app.UseAuthentication();

希望有一天这对某人有所帮助;)

关于docker - 来自 caddy 后面的 duende 的 Identityserver 在 openid 配置中有 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68962831/

相关文章:

docker-compose 认为文件是一个目录

php - 我无法通过 Caddy 使用 curl 连接到 https 站点服务器

docker - 容器正在运行但无法访问本地主机,我该如何解决这个问题?

nginx - docker 不会在 nginx html 根目录中创建文件夹

php - 如何提供对 PHP Docker 镜像和主机卷的权限?

c# - 为什么最终用户必须注销两次?

java - 如何配置spring拦截器以在每个请求中调用

asp.net-core - 将 SignalR 添加到现有 IdentityServer4 授权

c# - IdentityServer4 用户的声明未包含在 JWT 中且未发送到 Web Api

go - HTTPS连接在浏览器中显示“隐私”错误。 -球童服务器