AspNetCore.WsFederation получает перенаправление sign-wsfed на HTTP, когда исходный запрос HTTPS - PullRequest
0 голосов
/ 21 февраля 2019

Контекст представляет собой веб-сайт aspnetcore 2.1, размещенный в контейнере Docker через порт HTTP, наряду с использованием обратного прокси-сервера Nginx, который предоставляет только HTTPS 443.

Доступ к веб-сайту осуществляется извне по HTTPS, онперенаправляет на веб-сайт STS по HTTPS, который перенаправляет на / signin-wsfed по HTTPS.

Однако ответ location от / signin-wsfed является HTTP.

Вот запрос:

POST https://core-mydocker.####/signin-wsfed HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: https://sts-mydocker.####/Pages/Email/Default.aspx?wtrealm=https%3a%2f%2fcore-mydocker.####%2f&wa=wsignin1.0&wreply=https%3a%2f%2fcore-mydocker.####%2fsignin-wsfed&wctx=#####
Accept-Language: fr-FR,fr;q=0.8,en-GB;q=0.6,en;q=0.4,ja;q=0.2
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/7.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: core-mydocker.####
Content-Length: 10612
Connection: Keep-Alive
Cache-Control: no-cache

и ответ:

HTTP/1.1 302 Found
Server: nginx/1.12.2
Date: Thu, 21 Feb 2019 09:39:34 GMT
Content-Length: 0
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://core-mydocker.####/Authenticate
Set-Cookie: .AspNetCore.Correlation.WsFederation.######=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; HTTPOnly; Securesignin-wsfed; httponly
Set-Cookie: FedAuth=#######=/; HTTPOnly; Secure; httponly
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://mydocker.####

HTTP недоступен извне, это вызывает ошибку.

Как работает Microsoft.AspNetCore.Authentication.WsFederation определяет местоположение ответа, учитывая, что каждый параметр в более ранних запросах (wtrealm, wreply, ...) является HTTPS?

1 Ответ

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

Я мог бы найти решение этой проблемы, связанной с перенаправленными заголовками.

Бывает, что конфигурирование Nginx выполняется следующим образом:

proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Forwarded-Proto $scheme;

, а затем конфигурируется ASPNET Core следующим образом:

app.UseForwardedHeaders(new ForwardedHeadersOptions 
    { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }
    );

недостаточно.В этом посте приведено разрешение Прото-заголовки не работают

Бывает, что по умолчанию коллекция KnownNetworks обрабатывает только 127.0.0.1.В среде Docker, где каждый контейнер находится на отдельном IP-адресе, это должно быть неверно, и поэтому переадресованные заголовки будут игнорироваться.

Как следует из подтвержденного ответа, изменение кода на приведенное ниже исправило проблему:

var forwardingOptions = new ForwardedHeadersOptions()
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
forwardingOptions.KnownNetworks.Clear(); //its loopback by default
forwardingOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardingOptions);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...