安装Identity Server 4反向代理

9

编辑:更详细的说明

我们有以下设置:

  1. NGINX反向代理设置为进行SSL卸载。所有内部通信都通过HTTP进行。重定向的设置如下:

    proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Original-For $proxy_add_x_forwarded_for; proxy_set_header X-Original-Proto $scheme; proxy_cache_bypass $http_upgrade;

  2. IS4在app.UseIdentityServer之前有以下设置

    var fordwardedHeaderOptions = new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }; fordwardedHeaderOptions.KnownNetworks.Clear(); fordwardedHeaderOptions.KnownProxies.Clear(); app.UseForwardedHeaders(fordwardedHeaderOptions);

  3. 客户端上将RequireHttpsMetadata设置为FALSE

  4. 在IS4侧,所有客户端都配置了HTTPS地址的“RedirectUris”和“PostLogoutRedirectUris”。

  5. 在客户端侧,IdentityServerAuthenticationOptions的配置如下:

    new IdentityServerAuthenticationOptions { Authority = "https://[OAUTH_ADDRESS]", ApiName = "[API_NAME]", ApiSecret = "[API_SECRET]", RequireHttpsMetadata = false }

实际发生的情况是,当我们尝试访问IS4 Clients中注册的一个客户端,并且请求被重定向到IS4进行身份验证时,我们遇到了“未经授权的客户端”消息屏幕。此外,在检查重定向请求的查询字符串之后,我们可以看到返回的URL是HTTP而不是HTTPS。

请提供建议。


当IS4位于HTTPS前端,例如NGINX之后时,您不需要HTTPs。让NGINX进行SSL / TLS卸载“终止”。这是一种广为人知的实践,可以在后端执行ssl卸载以避免不必要的复杂性和性能降低,同时不影响安全性。 MS Azure应用类似的架构概念。更多信息请参见:https://learn.microsoft.com/en-us/aspnet/core/publishing/linuxproduction?tabs=aspnetcore2x#why-use-a-reverse-proxy-server - Jawad Al Shaikh
2个回答

4

您的设置可能会有所不同,但如果您仍在使用identityserver版本<2,我记得设置RequireHeaderSymmetry = false也适用于我们。

var forwardOptions = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    RequireHeaderSymmetry = false
};

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);

这个问题也在这里讨论过。

4

Identity Server的发现终点的默认行为是使用请求的方案(Http vs Https)。

由于您的身份服务器正在使用HTTP接收请求(因为它在反向代理后面),因此它提供的终点信息也将使用HTTP。

您可以通过访问http://[OAUTH_ADDRESS]/.well-known/openid-configuration来自行查看。

Identity Server的最新版本包括一个原点选项,允许您强制基本URL使用HTTPS。使用方法如下:

services.AddIdentityServer(options =>
    {
        options.PublicOrigin = "https://[OAUTH_ADDRESS]";
    })

{btsdaf} - Treach
{btsdaf} - Ben Cull
这对我在treafik代理后的Identityserver4有效,谢谢。 - Wajdy Essam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接