我正在 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 反向代理的主机端口
好吧,我在 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();
希望有一天这对某人有帮助;)
你今天帮助了某人。非常感谢