编辑:更详细的解释安装的Identity Server 4反向代理
我们有以下设置:
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;
IS4有app.UseIdentityServer
var fordwardedHeaderOptions = new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }; fordwardedHeaderOptions.KnownNetworks.Clear(); fordwardedHeaderOptions.KnownProxies.Clear(); app.UseForwardedHeaders(fordwardedHeaderOptions);
在客户端RequireHttpsMetadata之前,下面的设置被设置为FALSE
在IS4端,所有客户端都被配置为具有HTTPS地址以用于“重定向Uris“和”PostLogoutRedirectUris“。
在客户端IdentityServerAuthenticationOptions配置是这样的:
new IdentityServerAuthenticationOptions { Authority = "https://[OAUTH_ADDRESS]", ApiName = "[API_NAME]", ApiSecret = "[API_SECRET]", RequireHttpsMetadata = false }
实际发生的是,当我们试图访问我们的注册IS4的客户之一,并请求被重定向到IS4身份验证我们有“未经授权的客户端”消息屏幕。此外,在检查重定向请求的查询字符串之后,我们可以看到返回URL是HTTP而不是HTTPS。
请指教。
当IS4运行HTTPS前端(如NGINX)时,不需要HTTP,让NGINX执行SSL/TLS卸载“终止”。其众所周知的做法是为后端执行ssl卸载,以避免不必要的复杂性和性能降低,而不会产生安全影响。 MS Azure应用类似的架构师概念。更多在这里:https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction?tabs=aspnetcore2x#why-use-a-reverse-proxy-server –