Это моя конфигурация DI:
Код: Выделить всё
services.AddDbContext((sp, options) =>
{
options.UseSqlServer(MyConnectionString);
});
services.AddIdentity()
.AddEntityFrameworkStores()
.AddUserStore()
.AddRoleStore()
.AddClaimsPrincipalFactory()
.AddDefaultTokenProviders();
services.AddControllersWithViews()
.AddApplicationPart(typeof(MyAccountController).Assembly);
services.Configure(conf =>
{
conf.Authentication.CookieAuthenticationScheme = IdentityConstants.ApplicationScheme;
conf.UserInteraction.LoginUrl = "/MyAccount/Login";
conf.UserInteraction.LogoutUrl = "/MyAccount/Logout";
});
services.Replace(new ServiceDescriptor(typeof(IProfileService), typeof(MyCustomProfileService), ServiceLifetime.Transient));
Это также означает, что app.UseAuthentication() вызывается .UseIdentityServer(), который снова вызывается основным приложением, а не мной. Основное приложение также вызывает app.UseAuthorization().
.Configure успешно переопределяет URL-адреса входа и выхода из системы, поэтому я ожидаю, что схема также будет переопределена.
Теперь, когда внутри моего метода Login() я могу запустить await SignInManager.PasswordSignInAsync(username, пароль, true, true) и последующие вызовы User.Identity.IsAuthenticated возвращают true.
Однако любой вызов User.Identity.IsAuthenticated за пределами Login() возвращает false.
Я также пробовал добавить HttpContext.SignIn(IdentityConstants.ApplicationScheme, User) в Login(), безрезультатно.
Я также пытался переопределить AuthenticationOptions, но это тоже не дало эффекта:
Код: Выделить всё
services.Configure(config =>
{
config.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
config.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
config.DefaultSignInScheme = IdentityConstants.ApplicationScheme;
});
С помощью этой настройки я могу успешно войти в систему пользователя и получить свой идентификатор и токены доступа от IdentityServer, но не проверять User.Identity.IsAuthenticated после входа в систему.
Я чувствую, что что-то не так с схемы аутентификации мне не хватает, но я не могу это понять.
Что я упускаю или делаю неправильно, чтобы User.Identity.IsAuthenticated всегда был ложным, даже если пользователь успешно вошел в систему и файлы cookie установлены?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ated-false
Мобильная версия