В google auth как настроить ядро ​​asp.net для запроса перенаправлений https, когда ядро ​​asp.net работает только по протоколу http, а обратный прокси-сервер работает только по протоколу https? - PullRequest
0 голосов
/ 26 ноября 2018

enter image description here

В приведенной выше конфигурации есть основное приложение asp.net, использующее аутентификацию Google.Но по какой-то причине при перенаправлении аутентификации в Google отправлялся URI перенаправления с использованием http вместо https.Независимо от того, куда я смотрю, в промежуточном программном обеспечении, похоже, нет способа изменить это.

Со стороны apache я следовал учебному пособию, которое предположительно перенаправляет протокол с использованием

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

Однако он не работает правильно.Ниже приведена более подробная информация и интересные последствия для безопасности.

Теперь, поскольку kestrel использует http, по умолчанию он устанавливает «URI перенаправления» для аутентификации Google для использования протокола http.

У меня есть сценарий выше, работающий с URI перенаправления http.Я проверил это, и он работает с URI перенаправления HTTP!Хм, я только разрешаю https.Поэтому я tcpdump взаимодействия на моем сервере, и я обнаружил, что, поскольку Apache требует HTTPS, он выбрасывает HTTP 301, постоянно перемещенный в https.Отлично, это то, что я ожидал.Я не ожидал, что Google перенаправит на протокол https.ОК, не идеально, но это работает, так почему я спрашиваю?Сначала он отправляет данные по http, чтобы получить 301, поэтому в этот момент я потерял шифрование.Если кто-то отслеживает, он может прочитать весь ответ Google.Т.е. я могу увидеть гугл пост обратно по http с помощью tcpdump.

Ниже приведен единственный код, относящийся к аутентификации:

services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
        .AddGoogle(options =>
        {
            options.ClientId = Configuration["Authentication:Google:ClientId"];
            options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
        })
        .AddCookie(options =>
        {
            options.LoginPath = "/auth/signin";
        });

Обратите внимание, что в моем коде я НЕ использую app.UseHttpsRedirection ();

1 Ответ

0 голосов
/ 27 ноября 2018

Хотя мне все еще интересно найти способ изменить значение URI перенаправления, отправленного в Google из ядра asp.net с помощью аутентификации «.AddGoogle», мне удалось решить эту проблему, изменив конфигурацию apacheto:

RequestHeader set "X-Forwarded-For"
RequestHeader set "X-Forwarded-Proto" "https"

По существу жесткое кодирование протокола вынудило его передать «https» промежуточному программному обеспечению ядра asp.net, и теперь он работает правильно.

...