2017-03-02 9 views
1

私は非ローカルホスティング環境でhttpsオフロードなしでARRを使用しています。つまり、ARRに達したリクエストはhttpsですが、バックエンドサーバーに送信されるリクエストはちょうどhttpです。ARRを使用したOpeniddictのHttps要件

openiddictでhttpsの要件を無効にすると、設定によってhttpのURLが返されます。私がそれを有効にすると、バックエンドサーバーがそれらを受け取ったときに要求が拒否されます。http。これを回避する方法はありますか?

答えて

1

実際には、OpenIddictを使用する、または使用しないASP.NETコアアプリケーションに影響を与える非常に一般的な問題です。リバースプロキシレベルでTLS終了を行うと表示されます。この場合、ASP.NETコア実際のスキームが何であるかを知る方法が実際にないため、HttpRequest.Schemeはであり、httpsではないとみなします。

これを修正するには、OpenIddictを含むすべてのミドルウェアが意図したとおりに動作するように、実際のスキームを復元する必要があります。

これは、Microsoft.AspNetCore.HttpOverridesパッケージを参照してapp.UseForwardedHeaders()を呼び出すことによって"forwarded headers" middlewareを使用して行うことができます。

プロキシによっては、使用するヘッダーに合わせて設定を微調整する必要があります。

注:このミドルウェアは、IIS統合パッケージを使用すると自動的に登録されます。あなたはこの構文を使用して、デフォルトのオプションを修正することができます

services.Configure<ForwardedHeadersOptions>(options => 
{ 
    options.ForwardedHeaders = ForwardedHeaders.XForwardedProto; 
}); 

このアプローチが機能しない場合、あなたはまだインラインミドルウェアを使用してスキームをオーバーライドすることができます。

app.Use((context, next) => 
{ 
    context.Request.Scheme = "https"; 

    return next(); 
}); 

あなたのレジスタを確認してくださいそれは他のミドルウェアよりも前です。

+2

デフォルトでは 'ForwardedHeaderOptions.RequireSymmetry'が真であるため、' X-Forwarded-For'は2つのエントリがありますが 'X-Forwarded-Proto'は1であるため、デフォルトオプションはARRの後ろでは動作しません。 ForwardedHeaders = ForwardedHeaders.XForwardedProto'が機能しました。ありがとう。私は app.UseForwardedHeaders(新しいForwardedHeadersOptions(){ ForwardedHeaders = ForwardedHeaders.XForwardedProto、 を})を使用しました。 – pholly

関連する問題