Задать вопрос
@EgorSvinarev

Стоит ли выдавать доступ к базе данных микросервису?

Добрый вечер!
Занимаюсь проектированием учебного приложения на основе микросервисной архитектуры и возникла следующая ситуация: я планирую реализовывать API Gateway, на котором будет осуществляться авторизация/аутентификация пользователя. Каждый запрос будет прокидываться через сервис Auth, в котором будет проходить аутентификация средствами JWT-токенов. Ниже представил диаграмму:
6773fddfd2450104013028.png
Но тут у меня возник вопрос: откуда брать данные в Auth сервисе? Стоит ли выдавать ему прямой доступ к БД сервиса Users? Или лучше настроить отдельной реплику этой БД для него? А может стоит вообще поместить логику авторизации/аутентификации в сервис Users? (последний вариант спорный, потому что по идее сервис Auth должен быть максимально отказоустойчив и легковесен, т.к. через него проходит весь трафик приложения)
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
  1. Заводите для сервиса auth базу, в которой хранится только информация связанная с аутентификацией и авторизацией - идентификатор пользователя, хэш пароля, набор ролей, дата последней попытки логина, дата последнего успешного логина, количество неудачный попыток входа и т.п.;
  2. Из БД сервиса User эту информацию убираете, храните там остальные данные пользователя - логин, ФИО, адрес и т.п.;
  3. Добавляете в систему брокер очередей;
  4. При регистрации нового пользователя сервис User порождает событие, кладёт его в очередь, а сервис Auth подписывается на эти события и создаёт у себя в БД соответствующие записи.

67743e45c961d613863030.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@basili4-1982
Общее правило 1 сервис 1 хранилище. Я бы предложил не усложнять систему. Пусть сервис Auth ходит в сервис User.
Ответ написан
Комментировать
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.
Конечно, я не разработчик, но
почему бы к БД не подключить AAA-сервис, например RADIUS?
https://ru.wikipedia.org/wiki/RADIUS
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы