Есть отдельный 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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Моя задача такова, когда пользователь прокрутит скролл до конца текста выполняется нужный мне кодНо сколько не искал, не смог найти способа...
Мне нужно в 2 lebl'а парсить минуты и секунды соответсвенноВот функция которую я сделал:
Нужно создать компонент для нужд проектаВот максимально упрощённый код: