Прежде чем перейти к вопросу - как мы решаем бесконечный цикл аутентификации - некоторую информацию об архитектуре.
Мы используем .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 во вторичной службе?