Проблемы с идентификацией ASPNet Google за NGINX на основе обратного прокси -сервера на основе NGINXC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с идентификацией ASPNet Google за NGINX на основе обратного прокси -сервера на основе NGINX

Сообщение Anonymous »

Я в процессе добавления аутентификации 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»