2017-02-08 39 views
1

我遇到的問題是當我嘗試在使用SSL的IIS服務器上承載IdentityServer4的實現時。 (完全嚴格的SSL)將ASP.NET Core Module配置爲使用https而不是http來承載IdentityServer 4

當在Kestrel上單獨運行我的應用程序且SSL激活時,它工作正常,IdentityServer的IssuerUriDiscovery Endpoints使用SSL綁定。但是,當我將其託管在ASP.NET Core Module後面時,它將它託管在http://localhost:{random port}上,而這又爲IssuerUriEndpoints生成了不是https的Identityserver。

我曾嘗試沒有成功如下:

  1. 確信,我必須爲 HTTPS綁定的IIS網站上的有效證書,並取消了對端口綁定80

  2. 試圖改變環境變量ASPNETCORE_URLS在web.config中 指向一個https地址。

  3. 嘗試在web.config中重寫和重定向規則。

  4. 在我的啓動類中查找IISOptions(由.UseIISIntegration()使用) 的設置以綁定到特定的URL或更改協議。

  5. 試圖在IdentityServer4中找到類似RequireSSL(IdentityServer 3)或 RequireHttpsMetadata的設置。

  6. 在啓動類 的IdentityServer選項中更改了IssuerUri,希望它也可能更新其他端點。

我可能錯過了一件非常明顯的事情,但現在我不知道這可能是什麼。

來自社區的任何幫助,將不勝感激:-)

Program.cs中的代碼

public static void Main(string[] args) 
    { 
     Console.Title = "IdentityServer"; 

     var config = new ConfigurationBuilder() 
      .SetBasePath(Directory.GetCurrentDirectory()) 
      .AddJsonFile("kestrelHosting.json", optional: true) 
      .AddCommandLine(args) 
      .Build(); 

     var host = new WebHostBuilder() 
      .UseConfiguration(config) 
      .UseKestrel(options => 
      { 
       // options.ThreadCount = 4; 
       options.NoDelay = true; 
       options.UseHttps("VismaCert.pfx", "Visma123"); 
       //options.UseConnectionLogging(); 
      }) 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 

回答

0

AspNetCoreModule是SSL終結,也不會與紅隼通過HTTPS通信。它的功能是通過頭部轉發原始方案,以便在生成網址/鏈接時使用它。有一個ForwardedHeaders中間件默認包含了UseIISIntegration,它將把這些頭文件應用到請求字段。但是,有些情況下標題無法通過默認設置進行處理。這裏有大量的參考文獻:https://github.com/aspnet/Docs/issues/2384

+0

你可以顯示你的x -forwarded- * heades嗎? – Tratcher

+0

謝謝@Tratcher的迴應。在遵循您的鏈接並在ARR中添加響應標頭後,我現在可以獲得以下內容。 「X-FORWARDED-HOST:xxxxxxxx.xxx.xxx」,「X-FORWARDED-SCHEMA:https」,「X-FORWARDED-PROTO:https,http」和「X-Forwarded-For:xx.xx.x.xx :XXXXXX」。不幸的是,身份服務器似乎沒有選擇這些更改,而是讀取HttpContext.Request.Schema,而不是檢查請求。已經爲它的BaseUrlMiddleware設置了一個值爲https的標頭[「X-Forwarded-Proto」],因此我將向他們解釋如何最好地繼續處理一個新問題。 –

+0

在轉發標題選項上禁用require標頭對稱性。你的原型和For具有不同數量的值。 – Tratcher

相關問題