2017-02-08 18 views
1

Проблема заключается в том, что я пытаюсь организовать реализацию IdentityServer4 на сервере IIS с использованием SSL. (Full SSL Strict)Настройка основного модуля ASP.NET для хоста на https вместо http для IdentityServer 4

При запуске моей заявки на Kestrel в одиночку с активированным SSL это работает нормально, а IssuerUri и Discovery Endpoints для IdentityServer использует привязку SSL. Однако, когда я размещаю его за базовым модулем ASP.NET, он размещает его на http://localhost:{random port}, который, в свою очередь, генерирует IssuerUri и Endpoints для Identityserver, которые не являются https.

Я попытался следующие без успеха:

  1. Сделано уверен, что у меня есть действующий сертификат на веб-сайте IIS для HTTPS связывания и удаленного связывания на порт 80

  2. попытался изменить environmentvariable ASPNETCORE_URLS в web.config , чтобы указать адрес https.

  3. Пробные правила перезаписи и переадресации в web.config.

  4. Искал настройки на IISOptions (используется .UseIISIntegration()) в моем классе запуска для привязки к определенному URL-адресу или изменения протокола.

  5. Пытался найти аналогичные параметры, как RequireSSL (IdentityServer 3) или RequireHttpsMetadata в IdentityServer4.

  6. Изменен IssuerUri в IdentityServer Options в классе запуска , надеясь, что он может также обновить другие конечные точки.

Я, вероятно, пропустил что-то очень очевидное, но прямо сейчас я не знаю, что это может быть.

Любая помощь со стороны сообщества было бы весьма признателен :-)

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-терминатор, он не будет общаться с Kestrel над HTTPS. То, что он делает, это переслать исходную схему через заголовок, чтобы вы могли использовать его при создании URL-адресов. Существует промежуточное ПО ForwardedHeaders, включенное по умолчанию с помощью UseIISIntegration, которое будет принимать эти заголовки и применять их к полям запроса. Однако есть ситуации, когда заголовки не могут обрабатываться настройками по умолчанию. Здесь есть множество ссылок: https://github.com/aspnet/Docs/issues/2384

+0

Можете ли вы показать свои х-переправленные * заголовки? – 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 : хххххх». К сожалению, похоже, что identserver не подбирает эти изменения, а вместо этого считывает HttpContext.Request.Schema вместо проверки запроса.Заголовка ["X-Forwarded-Proto"] со значением https была установлена ​​для BaseUrlMiddleware, поэтому я рассмотрю новый вопрос о том, как лучше всего продолжить. –

+0

При отключении опций пересылаемых заголовков требуется симметрия заголовка. У вашего proto и For есть другое количество значений. – Tratcher

 Смежные вопросы

  • Нет связанных вопросов^_^