問題は、SSLを使用するIISサーバーでIdentityServer4の実装をホストしようとするときです。IdentityServer 4のHTTPではなくhttpsでホストするASP.NETコアモジュールを設定します
SSLを有効にしてKestrelだけでアプリケーションを実行すると、IdServerのIssuerUri
とDiscovery Endpoints
はSSLバインディングを使用します。しかし、私はそれをASP.NETコアモジュールの後ろにホストするとhttp://localhost:{random port}
でそれをホストし、それはhttpsではないIdentityServerのためにIssuerUri
とEndpoints
を生成します。
私は成功せず、次のことを試してみました:
私は がhttpsポート80変更しようとしましたに結合結合し、除去のためのIISのWebサイトの有効な証明書を持っていることを確認しました
web.config内の環境変数
ASPNETCORE_URLS
は、httpsアドレスを指します。web.configで書き換えルールとリダイレクトルールを試しました。
特定のURLまたは変更プロトコルにバインドするスタートアップクラスの(
.UseIISIntegration()
によって使用される) の設定が検索されました。は
RequireSSL
(IdentityServer 3)またはIdentityServer4で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- *の頭を表示できますか? – 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 "となります。残念ながら、identityserverはこれらの変更を認識せず、代わりにリクエストがあるかどうかをチェックする代わりにHttpContext.Request.Schemaを読み込むように見えます。BaseUrlMiddlewareのヘッダー["X-Forwarded-Proto"]の値がhttpsに設定されているので、最善の方法について新しい質問をします。 –
転送ヘッダーオプションでは、ヘッダーの対称性が不要です。あなたのprotoとForは異なる数の値を持っています。 – Tratcher