Идентификация ASP.NET с IdentityServer и проблемы с IsAuthenticated == falseC#

Место общения программистов C#
Ответить
Anonymous
 Идентификация ASP.NET с IdentityServer и проблемы с IsAuthenticated == false

Сообщение Anonymous »

У меня есть удостоверение ASP.NET, настроенное с помощью IdentityServer.
Это моя конфигурация 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));

Вы, вероятно, увидите, что у меня здесь нет .AddIdentityServer(), и это потому, что я расширяю существующее приложение (имеющее плагинную архитектуру), которое уже вызывало .AddIdentityServer() и .AddAuthentication(), поэтому я не могу использовать .AddAspNetIdentity(), поскольку у меня нет доступа к Идентитисервербилдер. Вот почему я добавил свою собственную MyCustomClaimsFactory (унаследованную от UserClaimsPrincipalFactory) для обработки утверждений так же, как это делает IdentityServer.AspNetIdentity. Именно поэтому я заменяю IProfileService, а не просто добавляю его.
Это также означает, что 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;
});

У меня есть файлы cookie .AspNetCore.Identity.Application и idsrv.session.
С помощью этой настройки я могу успешно войти в систему пользователя и получить свой идентификатор и токены доступа от IdentityServer, но не проверять User.Identity.IsAuthenticated после входа в систему.
Я чувствую, что что-то не так с схемы аутентификации мне не хватает, но я не могу это понять.
Что я упускаю или делаю неправильно, чтобы User.Identity.IsAuthenticated всегда был ложным, даже если пользователь успешно вошел в систему и файлы cookie установлены?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ated-false
Ответить

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

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

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

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

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