Мне нужно написать back-end с двумя типами аутентификации: JWT
для обычных пользователей и Cookie
для администраторов. Я знаю, что это делается очень просто, нужно в классе Startup
написать что-то похожее на это:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer()
.AddCookie();
Конкретно мне не понятно, где узнать, какие схемы аутентификации бывают или как настроить схему под себя? Как написать, что посетитель с ролью user
авторизуется через JWT
, а admin
через Cookie
?
Очень жалко, что нет учебника где было бы все подробно расписано.
Пока что нашел как осуществить миграцию с .net core 1.x на 2.x, там приведены некоторые схемы аутентификации, но не такие которые нужны мне. Вот ссылка.
Еще нашел как совместить Identity и JWT аутентификацию, но там все равно не то что нужно. Вот ссылка.
какие схемы аутентификации бывают
Отправлю к трём замечательным вопросам на ru so:
Как написать, что посетитель с ролью user авторизуется через JWT, а admin через Cookie?
Сама постановка задачи говорит о том, что вы путаете процесс аутентификации и авторизации.
Поэтому фраза "авторизуется через JWT" некоректна: JWT/cookie - это процесс аутентификации. То есть приходит пользователь, приносит куки или токен и говорит "я есть Пупкин".
Поэтому в принципе вы не можете уже после определения роли указать, каким аутентификационным механизмом пользоваться.
Но можно поступить чуть иначе. ;)
Допустим, у вас есть механизм аутентификации по JWT (см. метод Auth класса AccountController).
Вы можете не только при principal == null отдавать 401, но и отдавать 403 если principal не пустой, но содержит claim имеющий claimType=Role со значением admin. То есть не отдавать админам токен.
Или если подобный запрет нужно более точечно сделать - указать схему авторизации только в нужных местах:
public class HomeController : Controller
{
[Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
public IActionResult Index()
{
}
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult About()
{
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
На работе появилась необходимость передавать входные данные из TextBox'ов в базу данных SQL ServerВот мои попытки реализовать это
Разбирая тему многопоточности по Шиелду 40, столкнулся с проблемой