Более оптимальное решение для проверки доступа пользователя к ресурсу
Допустим имеется решение веб приложения для внутренней работы компании. С проектами Core, MVC. В MVC для регистрации и авторизации используется Identity.
Имеются две базы: первая под Identity, вторая под ресурсы компании. Во второй имеется таблица хранящая данные о доступах пользователя к компании, в которой UserId соответствует пользователю из базы Identity.
В Core в каждом сервисе бизнес логики проверяется проверка имеет ли пользователь доступ к ресурсу, т.е например в ICompanyService проверяется имеет ли доступ пользователь к компании, в ICompanyCommandService проверяется имеет ли доступ пользователь к данной команде сервиса. И так выходит, что в каждый метод приходится добавлять UserId, взятый из Identity и прокидывать его по методам для проверки доступа. Что мне кажется не удобным.
Имеется ли более удобное решение?
Ответы (1 шт):
Да, можно попробовать перейти на авторизацию по JWT-токену.
Техника следующая: на сервере хранится закрытый ключ. Когда пользователь вводит свои логин и пароль сервер возвращает ему генерированный токен, подписаный при помощи этого закрытого ключа. Затем, пользователь делает запросы к API посылая этот токен (в заголовке, например).
Сам токен представляет собой контейнер в котором можно хранить различные параметры, включая необходимые права пользователя. Так как токен подписан, вам не нужно проверять данные внутри него. Таким образом можно избавится от постоянных проверок в базе. Инфраструктура asp.net поддерживает работу с этими ключами через схему проверки подлинности JWT Bearer