Почему Identity генерирует небезопасные URI перенаправления? - PullRequest
0 голосов
/ 01 марта 2019

Использование Asp.Net Core 2.1.4.Приложение находится за обратным прокси-сервером Nginx, запускаемым из образа докера https://github.com/jwilder/nginx-proxy, который включает в себя конфигурацию заголовка x-forwarded- *.

В моем методе Startup.Configure первое, что я делаюis:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.All
});

Затем для настройки внешней аутентификации в ConfigureServices:

services.AddAuthentication().AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = Configuration["FacebookAppId"];
    facebookOptions.AppSecret = Configuration["FacebookSecret"];
})
.AddGoogle(googleOptions =>
{
    googleOptions.ClientId = Configuration["GoogleClientId"];
    googleOptions.ClientSecret = Configuration["GoogleClientSecret"];
});

И для настройки Identity:

services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<IdentityDbContext>()
    .AddDefaultTokenProviders();

Тогда у меня есть действие контроллера, которое мойВойдите в форму сообщений на:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
{
    // Request a redirect to the external login provider.
    var redirectUrl = Url.Action(nameof(ExternalLoginCallback), "Account", new { returnUrl });
    var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
    return Challenge(properties, provider);
}

HTTP работает на весь сайт.Я вижу в инструментах разработчика Chrome, что вызов маршрута, который ведет к ExternalLogin, осуществляется через https, но затем приложение перенаправляет меня в Facebook или Google с redirect_uri, который является http.После аутентификации и перенаправления обратно на URL-адрес http мое приложение автоматически перенаправляет на https.

Как я могу заставить Identity генерировать защищенный перенаправляющий Uris?

1 Ответ

0 голосов
/ 01 марта 2019

Согласно документации, представленной на основном сайте .net:Если приложение развернуто за прокси-сервером или балансировщиком нагрузки, часть исходной информации о запросе может быть перенаправлена ​​приложению в заголовках запросов.Эта информация обычно включает в себя схему безопасного запроса (https), хост и IP-адрес клиента.Приложения не читают автоматически эти заголовки запросов, чтобы обнаружить и использовать информацию исходного запроса.

Схема используется при генерации ссылок, которая влияет на процесс аутентификации с внешними поставщиками. Потеря защищенной схемы (https) приводит к тому, что приложение генерирует неправильные URL-адреса небезопасного перенаправления.

Чтобы решить эту проблему, вы можете попробовать изменить конфигурации nginx и получить более подробную информацию здесь

...