【发布时间】:2018-10-01 21:09:13
【问题描述】:
编辑:更详细的解释
我们有以下设置:
-
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 端,所有客户端都配置为具有“RedirectUris”和“PostLogoutRedirectUris”的 HTTPS 地址。
-
在客户端 IdentityServerAuthenticationOptions 配置如下:
new IdentityServerAuthenticationOptions { Authority = "https://[OAUTH_ADDRESS]", ApiName = "[API_NAME]", ApiSecret = "[API_SECRET]", RequireHttpsMetadata = false }
实际发生的情况是,当我们尝试访问我们在 IS4 中注册的客户端之一并且请求被重定向到 IS4 进行身份验证时,我们会看到“未经授权的客户端”消息屏幕。此外,在检查重定向请求的查询字符串后,我们可以看到返回 URL 是 HTTP 而不是 HTTPS。
请指教。
【问题讨论】:
-
当 IS4 位于 HTTPS 前端(如 NGINX)的后面时,您不需要 HTTPS,让 NGINX 执行 SSL/TLS 卸载“终止”。众所周知的做法是为后端进行 ssl-offloading,以避免不必要的复杂性和性能降低,而不会影响安全。 MS Azure 应用了类似的架构师概念。更多:docs.microsoft.com/en-us/aspnet/core/publishing/…
标签: https asp.net-core identityserver4