Бесконечный цикл авторизации при использовании RunProxy и OpenIdConnect - PullRequest
0 голосов
/ 06 марта 2019

Прежде чем перейти к вопросу - как мы решаем бесконечный цикл аутентификации - некоторую информацию об архитектуре.

Мы используем .net core 2.1.

У нас есть 2 службы.Первый - это тот, который сталкивается с общедоступным трафиком, выполняет ли завершение TLS и выясняет, должен ли запрос быть передан или нет.(Возможно, к другим серверам) Когда этот сервер выясняет, что запрос сделан по определенному пути, он использует метод RunProxy для сопоставления запроса с «другим» сервисом, использующим http.Этот код выглядит следующим образом:

app.MapWhen(<MatchRequestCondition>, proxyTime => proxyTime.RunProxy(
                new ProxyOptions
                {
                    Scheme = "http",
                    Host = "localhost",
                    Port = "1122"
                }
            ));

Например, если вы посетите https://localhost:1234/abc - это будет сопоставлено с http://localhost:1122 - это порт, где живет второе приложение.

Теперь этот вторичный сервис использует OpenIdConnect - его конфигурация выглядит следующим образом.

// Configure Services method
services.AddMvc(mvcOptions => {
AuthorizationPolicy policy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();
                        mvcOptions.Filters.Add(new AuthorizeFilter(policy));
});

services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddOpenIdConnect(auth =>
            {
                auth.ClientId = "<client_id>";
                auth.ClientSecret = "<client_secret>";
                auth.Authority = "<authority>";
            });


// Configure method
app.UseAuthentication();

Вот где это становится интересным:

Если я посещаю второй узел(тот, который предназначен для получения трафика только от первого) напрямую - как http://localhost:1122 - я перенаправлен на вход, и все работает правильно.

Но если я посещаю первый узел(именно из него должен поступать реальный трафик) - он входит в сумасшедший цикл аутентификации.

Есть идеи, что может быть причиной?Чем это отличается от наличия балансировщика нагрузки перед обычным обслуживанием?Или, может быть, это потому, что я использую промежуточное программное обеспечение cookie во вторичной службе?

...