В приведенной выше конфигурации есть основное приложение 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 ();