Есть отдельный WebApi проект над базой данных пользователей "UserDbWebApi", которую использует проект для авторизации на IdentityServer4
"IdentityServerApi_AspNetIdentity".
Для предоставления CRUD операция к "UserDbWebApi", также нужна регистрация через IdentityServer4 (Только пользователь с ролью SuperAdmin может иметь доступ к этому api).
Пользователи хранятся в удобном виде ApplicationUser
наследованном от IdentityUser (ASP.NET Core Identity).
Проблема в том что система аутентификации ASP.NET Core Identity
перекрывает система аутентификации IdentityServer4
.
Для удобства работы с БД пользователей ASP.NET Core Identity
предполагает использовать удобные сервисы над EF:
UserManager<ApplicationUser>
RoleManager<ApplicationUser>
для их регистрации в DI нужно подключить
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
После этого сервисы доступны через DI по всему проекту.
Но вызов AddIdentity
также подключает авторизацию ASP.NET Core Identity
и доступ с токеном выданным IdentityServer4
уже не работает.
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
[Authorize(Roles = "SuperAdmin")]
public ActionResult<IEnumerable<string>> Get()
{
//Доступ работает только с токеном выданным IdentityServer4
}
}
В итоге для нормальной работы авторизации AddIdentity
мне подключать не нужно, но нужны сервисы UserManager
, RoleManager
.
Как их зарегить в DI
?
В лоб не работает
services.AddScoped<UserManager<ApplicationUser>>();
services.AddScoped<RoleManager<ApplicationUser>>();
Или как отключить авторизация используя AddIdentity
?
Или все таки придется отказаться от UserManager, RoleManager и работать напрямую с контекстом EF?
Нужно явно указать систему авторизации в атрибуте. Использовать Cookie для AspNetIdentity или использовать Bearer для моего случая авторизации через выданный токен. [Authorize(AuthenticationSchemes = "Bearer", Roles = "SuperAdmin")] Вот и все! и можно подключать сервисы AddIdentity.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Моя задача такова, когда пользователь прокрутит скролл до конца текста выполняется нужный мне кодНо сколько не искал, не смог найти способа...
Мне нужно в 2 lebl'а парсить минуты и секунды соответсвенноВот функция которую я сделал:
Нужно создать компонент для нужд проектаВот максимально упрощённый код: