我遇到的問題是當我嘗試在使用SSL的IIS服務器上承載IdentityServer4的實現時。 (完全嚴格的SSL)將ASP.NET Core Module配置爲使用https而不是http來承載IdentityServer 4
當在Kestrel上單獨運行我的應用程序且SSL激活時,它工作正常,IdentityServer的IssuerUri
和Discovery Endpoints
使用SSL綁定。但是,當我將其託管在ASP.NET Core Module後面時,它將它託管在http://localhost:{random port}
上,而這又爲IssuerUri
和Endpoints
生成了不是https的Identityserver。
我曾嘗試沒有成功如下:
確信,我必須爲 HTTPS綁定的IIS網站上的有效證書,並取消了對端口綁定80
試圖改變環境變量
ASPNETCORE_URLS
在web.config中 指向一個https地址。嘗試在web.config中重寫和重定向規則。
在我的啓動類中查找
IISOptions
(由.UseIISIntegration()
使用) 的設置以綁定到特定的URL或更改協議。試圖在IdentityServer4中找到類似
RequireSSL
(IdentityServer 3)或RequireHttpsMetadata
的設置。在啓動類 的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();
}
你可以顯示你的x -forwarded- * heades嗎? – Tratcher
謝謝@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」],因此我將向他們解釋如何最好地繼續處理一個新問題。 –
在轉發標題選項上禁用require標頭對稱性。你的原型和For具有不同數量的值。 – Tratcher