В моей компании мы создаем приложение поверх микросервисов. Мы пытаемся решить, как обрабатывать авторизацию и аутентификацию. Мы думаем о том, чтобы пойти по пути, в котором мы используем OpenId Connect для аутентификации пользователей, но когда дело доходит до авторизации, нам нужен совет.
Позвольте мне объяснить, как работает решение: пользователь может иметь разные роли в разных отделах, а количество отделов может превышать 200. В каждом отделе пользователь может иметь несколько ролей. Мы понимаем, что рекомендуемый способ обработки ролей - поместить их в маркер, отправленный с клиента на сервер (JWT). Но мы обеспокоены тем, что это сделает полезную нагрузку токена слишком большой. Насколько я знаю, браузер может хранить заголовки до 5 КБ данных. В нашем случае это около 50 отделений с двумя ролями (без сжатия). Преимущества такого подхода заключаются в том, что пользователь авторизуется и аутентифицируется при входе в микросервис. Как я уже говорил, минусы - большая полезная нагрузка в токене.
Мы также рассматриваем другой вариант, в котором мы сводим JWT к минимуму (userid и detamentid) и запрашиваем Keycloak для получения прав пользователя при каждом запросе (возможно, добавьте некоторый механизм кэширования с коротким сроком службы). Этот подход будет генерировать много запросов к серверу авторизации.
Что я ищу, так это какой-то совет / опыт того, как другие решили это. Я рад предоставить больше информации, если это необходимо.
Чтобы вам было легче давать советы, вот краткое описание двух вариантов:
1) Использовать JWT для обработки аутентификации и авторизации? Зачем?
2) Поддерживать JWT и делать запросы на сервер авторизации в каждом микросервисе? Почему?