2017-10-16 166 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,如果存在任何嚴重問題,我會通知您。到目前爲止,什麼東西阻止你? –