Я в процессе добавления аутентификации Google в веб -приложение .NET 8 за nginx Reverse Proxy. У меня есть сертификат Let's Encrypt для HTTPS, он завершается на прокси и трафик между приложением, а прокси -сервера является простым HTTP. Я знаю, что заголовки x-forwarded-* должны быть установлены на обратном прокси, он настроен, и вверх до сих пор приложение, казалось, функционировало нормально-оно возвращает некоторые прямые ссылки на изображения/и т. Д. И они возвращаются как https: //*, поэтому я совершенно уверен, что все работает как должно. Проблемы, на которые я стучал в голову уже пару дней. < /p>
Для реализации, которую я использую довольно сложно поймать эту проблему.
Google Side, похоже, настроена ОК, у меня есть идентификатор клиента и секрет, добавил мои обратные вызовы, чтобы разрешить список (https://www.example.com /signin-google).
При входе в систему со стороны приложения-начальный вызов Google проходит, пользователь может выбрать свою личность (если несколько), и он выглядит как первоначальный обратный вызов (к /signin-google, который обрабатывается библиотеками идентификации) возвращается в порядке, однако после этого возникает проблема.
, насколько я понимаю, библиотека идентификации выполняет звонок HTTP (S), чтобы получить информацию о пользователе после получения обратного вызова в Google /Signin-Google, и он бросает. исключение. Похоже, что этот запрос на информацию пользователя отклоняется Google по причине «Плохой запрос», redirect_uri_mismatch. Не подтверждено (не знайте, как это сделать), но я подозреваю, что библиотека идентификации не способна идентичности, которую она стоит за обратным прокси и отправляет некоторый обратный вызов в качестве простого http. Просто чтобы повторить - это единственный случай во всем приложении, когда я вижу этот эффект, что приложение не понимает, что оно стоит за https, завершающим прокси. Режим разработки (производство не позволяет HTTP, только HTTPS) Все работает, как и ожидалось. Внутренний обработчик обратного вызовов: < /p>
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext(options => options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores();
builder.Services
.AddAuthentication()
.AddGoogle(options =>
{
options.ClientId = "deleted";
options.ClientSecret = "deleted";
});
//accepting everything for testing purpouses
builder.Services.Configure(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.ForwardLimit = null;
options.KnownProxies.Clear();
options.KnownNetworks.Clear();
});
var app = builder.Build();
app.UseForwardedHeaders();
//works as expected, I can see google login screen
app.MapGet("login", () => {
var authenticationProperties = new AuthenticationProperties
{
RedirectUri = "ok"
};
return Results.Challenge(authenticationProperties, [GoogleDefaults.AuthenticationScheme]);
});
//never hit, receive .NET exception after i get redirected back to signin-google on app side
//the exception 100% comes from application side, just to rule out other layers - I can see "Unhandled exception" here
//when added to google options Events.OnRemoteFailure gets called, however I failed to get something usefull out of it except of already known "Bad Request" and redirect_uri_mismatch
app.MapGet("ok", () => "ok");
app.Run();
< /code>
Страница исключений < /p>
Заголовки Nginx Установите на местоположении /(Пробовали разные комбо без результата): < /p>
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
< /code>
выглядит так, будто заголовки установлены. Я также вижу, что «хост» установлен на правильный
Обе скриншоты сделаны с одной и той же страницы, адресная строка показывает https://www.example.com/sigin-google? State = LoadSOfParamSFromGoogle < /p>
Пробовал экспериментировать с настройками обратного прокси, но я думаю, что все заголовки устанавливаются правильно. /p>
На данный момент я даже не уверен, где лежит проблема, потому что приложение (и поток входа) частично работает ... < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... erse-proxy
Проблемы с идентификацией ASPNet Google за NGINX на основе обратного прокси -сервера на основе NGINX ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение