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

问题描述 投票:0回答:2

我正在 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 省略运行 nginx 反向代理的主机端口

docker identityserver4 caddy
2个回答
4
投票

好吧,我在 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();

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


0
投票

你今天帮助了某人。非常感谢

© www.soinside.com 2019 - 2024. All rights reserved.