Приложение ASP.NET Core находится за прокси-сервером ssl, а URL-адрес ответа - http: //, а не https: // - PullRequest
0 голосов
/ 07 июня 2018

У меня есть приложение ASP.NET Core на сервере IIS, которое прослушивает все случаи использования what.domain.com/virtual-dir.Внешний мир получает к нему доступ через ssl-ускоритель.Он использует Microsoft.AspNetCore.Authentication.OpenIdConnect для аутентификации OpenId через AzureAd.

Из-за SSL-прокси приложение использует базовую схему адресов http, а не https (http://whatever.domain.com/virtual-dir противhttps://whatever.domain.com/virtual-dir. Это приводит к отправке адреса ответа http://whatever.domain.com/virtual-dir/signin-oidc, а не https://whatever.domain.com/virtual-dir/signin-oidc. Я могу изменить конечную точку обратного вызова с помощью OpenIdConnectOptions.CallbackPath , но это только относительно базыURL. Как мне изменить базовый URL?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Направления для этого здесь:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.1#when-it-isnt-possible-to-add-forwarded-headers-and-all-requests-are-secure

Разбивка:

  1. Ваш прокси-сервер должен установить три заголовка Http, X-Forwarded-For,X-Forwarded-Proto и X-Forwarded-Host
  2. Вам необходимо настроить ForardHeaderOptions .Теоретически IIS должен сделать это за вас.
  3. В Startup.Configure() вам нужно позвонить app.UseForwardedHeaders(); до app.UseAuthentication(), чтобы база Request была переписана.
0 голосов
/ 07 июня 2018

Не делай этого.Это плохая идея.

Лучший способ, который я до сих пор выяснил, как это сделать, - установить OpenIdConnectOptions.Events.OnRedirectToIdentityProvider для функции ив этой функции вы можете редактировать ProtocolMessage.RedirectUri в передаваемом параметре RedirectContext .

/// <seealso cref="OpenIdConnectEvents.OnRedirectToIdentityProvider"/>
public async Task OnRedirectToIdentityProvider(RedirectContext redirectContext)
{
       redirectContext.ProtocolMessage.RedirectUri =
           "https://whatever.domain.com/virtual-dir";
}
...