@Birthright50
Java Developer

Как синхронизировать изменение ролей/привилегий в микросервисной архитектуре?

На данный момент использую стандартные компоненты Spring Cloud:
Discovery, Config, Gateway, но думаю даже здесь не столько будет важен стек технологий, сколько понять как правильно организовать синхронизацию привилегий когда используются микросервисы.
Есть условно говоря user-service, cart/order и т.п. Флоу запросов на данный момент такой:
  1. Если нет JWT токена/стухло время действия, пойти через gateway в user-service за токеном, послав свои креды.
  2. С этим токеном через gateway пойти в нужный сервис.

В моем случае gateway вообще не делает никаких проверок на токен, он просто проксирует запросы и юзается как единая точка входа.
Каждый сервис без запросов к user проверяет валидность JWT публичным ключем, который был указан в их конфиге при старте.
Теперь суть. Проблема сейчас такая, что все микросервисы зависят от одного общего компонента, где есть Enum - Privilege. Его примерное наполнение:
  • ORDER_VIEW
  • ORDER_EDIT

И я в каком-либо сервисе прописываю в SecurityConfig antMatcher с этим Enum и endpoint, который я хочу защитить.
Проблемы:
  1. Если user-service сгенерил JWT токен, где есть эта привилегия в виде енама, то при попытке десериализовать другим микросервисом, когда он он еще не обновлен с учетом изменение в классе енама, то он просто грохнется на десериализации. Это к слову что нужно избавляться как-то от общих компонентов чтоб они были независимыми.
  2. Если у нас становится очень много привилегий, выходит у нас растет в размере токен и мы с каждыми запросами будем гонять трафик туда сюда. Хотя я думаю тут енам не первопричина, а то что привилегия записывается в виде строки.
  3. Добавили мы в условный order-service antMatcher c эндпоинтом /api/v2/orders с привилегией ORDERS_EDIT, как пропушить эти изменения user-service в его базу? координироваться между командами?


И в целом бы хотелось услышать какие проблемы могут возникнуть с этим флоу авторизации, который я расписал выше.
https://ordina-jworks.github.io/microservices/2017...
прочитал такой пост с использованием oauth2. Из того что прочитал на проблемы под номером 2 и 3 так и не нашел там ответов, да и идея странная, зачем проверять JWT токен в uaa server на каждом запросе? Это ж замедляет всю систему в целом.
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы