Как использовать Core ASP.Net Identity, балансировщик нагрузки и Identity.External вместе?
У меня возникают проблемы при объединении нескольких библиотек и среды со сбалансированной нагрузкой для создания успешных функций входа в систему.
Я работаю с Microsoft.AspNetCore.Identity.EntityFramework
2.0.3 и пользовательская реализация SAML, которая использует Microsoft.AspNetCore.Identity.SignInManager.GetExternalLoginInfoAsync()
чтобы получить информацию для входа. Локально все это отлично работает вместе, даже в IIS. Но на сервере, на котором это развернуто, это не работает. GetExternalLoginInfoAsync()
не удается пройти проверку подлинности, что заставляет систему идентификации перенаправить на страницу входа в систему и не позволяет продолжить проверку подлинности пользователя. Тем не менее, он периодически работал в среде с балансировкой нагрузки. Возможно, 1% времени это работает, в основном, после нового развертывания кода. Тогда это возвращается к неработающему.
Вот что я вижу в журнале при его развертывании на сервере с балансировкой нагрузки:
AuthenticationScheme: "Identity.External" не был аутентифицирован.
Это мой общий запуск Identity:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Кстати, стандартная реализация ASP.Net Identity прекрасно работает в этой среде с балансировкой нагрузки. Но не реализация с GetExternalLoginInfoAsync()
,
Я посмотрел здесь на SO и на сайте MS, но я не могу найти ничего, что касается этого сценария.
Код, который я использую, основан на этом проекте. Вот где он пытается вызвать рассматриваемый метод:
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
_logger.LogWarning("Null login info");
return RedirectToPage("./Login");
}
Локально, это не возвращает ноль, и info
используется для входа в ASP.Net Identity. На сервере он возвращает ноль.
Как я могу сделать GetExternalLoginInfoAsync()
работает на сервере 100%, с балансировкой нагрузки или нет, когда он работает нормально локально?