2017-10-16 167 views
2

编辑:更详细的解释安装的Identity Server 4反向代理

我们有以下设置:

  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地址以用于“重定向Uris“和”PostLogoutRedirectUris“。

  5. 在客户端IdentityServerAuthenticationOptions配置是这样的:

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

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

请指教。

+0

当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 –

回答

0

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]"; 
    }) 
+0

我们使用版本1.5.2和没有“PublicOrigin”属性。也许你指的是大于等于2的版本,就我所见,它需要.NET Core 2.0。 我们目前所做的是: services.AddIdentityServer(选项=> { 选项。IssuerUri =“https:// [OAUTH_ADDRESS]”; }) 但显然它不起作用。 – Treach

+0

是的,它只是在第2版中添加的。我目前正在将所有内容更新为.net core 2,如果存在任何严重问题,我会通知您。到目前为止,什么东西阻止你? –