我使用ARR沒有https
卸載我們的非本地託管環境。這意味着命中ARR的請求是https
,但發送到後端服務器的請求只是http
。HTTPS要求使用ARR
如果我在openiddict禁用https
要求再配置返回http
網址。如果我啓用它,那麼請求將被拒絕,後端服務器會以http
的身份接收它們。有沒有辦法解決?
我使用ARR沒有https
卸載我們的非本地託管環境。這意味着命中ARR的請求是https
,但發送到後端服務器的請求只是http
。HTTPS要求使用ARR
如果我在openiddict禁用https
要求再配置返回http
網址。如果我啓用它,那麼請求將被拒絕,後端服務器會以http
的身份接收它們。有沒有辦法解決?
你描述的其實是一個很常見的問題是影響任何ASP.NET的核心應用,做 - 或不 - 用OpenIddict和反向代理級別執行TLS終止時出現:在這種情況下,ASP.NET核心確實沒有辦法知道實際的方案是什麼,所以它假定HttpRequest.Scheme
是http
,而不是https
。
爲了解決這個問題,你必須還原真實的方案,使所有依賴於它的中間件 - 按照預期工作 - 包括OpenIddict。
這可以使用"forwarded headers" middleware通過參考Microsoft.AspNetCore.HttpOverrides
包並調用app.UseForwardedHeaders()
來完成。
根據你的代理,你可能需要調整設置以匹配其使用的標頭。
注意:使用IIS集成包時,會自動註冊此中間件。您可以使用此語法修改默認選項:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
});
如果這個方法行不通,你仍然可以使用內聯中間件覆蓋方案:
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
確保您的註冊它在任何其他中間件之前。
因爲'ForwardedHeaderOptions.RequireSymmetry'默認爲true,所以默認選項不會在ARR後面工作,因爲'X-Forwarded-For'有2個入口但'X-Forwarded-Proto'有1個。所以設置'選項。 ForwardedHeaders = ForwardedHeaders.XForwardedProto'工作。謝謝。我用 app.UseForwardedHeaders(新ForwardedHeadersOptions() { ForwardedHeaders = ForwardedHeaders.XForwardedProto, }); – pholly