У меня проблема с дизайном, и я не знаю, как ее решить.
Допустим, мое основное приложение состоит из 6 модулей:
Предполагается, что клиент взаимодействует только с сервисом-шлюзом.
Должен ли мой шлюз выполнять аутентификацию пользователя (которая в идеале приводит к JWT), а остальные 3 продуктивных сервиса (форум, галерея, сообщения) просто проверяют этот токен и получают разрешения и роли они управляют собой для этого пользователя?
Чтобы, возможно, проиллюстрировать свои небольшие проблемы, я создаю диаграмму последовательности:

кликните сюда для оригинальной графики draw.io, если вам так больше нравится.
Я не хочу использовать сторонние сервисы авторизации; Я просто хочу, чтобы моя служба авторизации (что в значительной степени уже сделано) регистрировала пользователей и позволяла им входить в систему. Или мне также следует управлять разрешениями и ролями в этой службе?
Я пытался осмыслить эту проблему в течение нескольких месяцев, но я просто не могу найти подходящую структуру, чтобы позволить пользователю регистрироваться, входить / выходить из системы и общаться с различными продуктивными службами. В настоящее время я использую Java для бэкэнда, но микросервисы хороши тем, что мне не нужно использовать один язык программирования для всех.
Любая помощь здесь приветствуется!
PS: Я читал Стратегия микросервисной аутентификации и Zuul - Аутентификация шлюза API, но оба, похоже, не применимы в моем случае.
для ваших пользователей, вероятно, так и есть.





Это зависит от сложности настройки разрешений.
Если ваши разрешения очень простые, то есть все службы нуждаются в аутентификации и имеют одну роль для работы, вы можете добавить ее в api шлюза.
Если вам нужен более детальный подход, вам нужно сделать это на уровне модуля. Обычно в архитектуре микросервисов каждая служба будет вызывать другую службу, и наличие настроек авторизации на уровне модуля позволяет избежать предварительного знания необходимых разрешений, необходимых в API шлюза. И вы можете развернуть каждый из этих модулей, не задумываясь о других сервисах, иметь детальные разрешения на уровне методов и т. д.
Я работал со следующей установкой, и она сработала очень хорошо:
Теперь это простой рабочий процесс, который мы реализовали без любой (много) сторонней помощи. В какой-то момент нам пришлось использовать файлы cookie сеанса, но это было по другим причинам. Обратите внимание, что система почти не имеет состояния, за исключением черного списка в службе аутентификации. Невозможно просто выйти из системы с помощью jwt! У нас был РЕДИС для управления черными списками. Вы можете реализовать выход с помощью сеансовых файлов cookie на шлюзе или в службе аутентификации.
Большинство серверных сервисов ожидали своего собственного набора ролей / привилегий / полномочий в jwt. Роли были предоставлены пользователю службой аутентификации и были записаны в предоставленном jwt. Если пользователю была предоставлена новая роль, пользователь должен был выйти из системы / войти в систему, чтобы отразить эту привилегию. Если какая-то привилегия была удалена, то пользователь должен был принудительно выйти из системы - именно здесь играл REDIS.
Я подумал о чем-то вроде вашего ответа. Я полагаю, что под REDIS вы имеете в виду redis.io, поэтому я полагаю, что я попробую (я уже кое-что сделал, но не продолжил работу над этим, так как это частный проект).
@sschrass, это не очень полезно ... как вы думаете, я бы опубликовал вопрос во всех его деталях и с включенной диаграммой, если бы я не подумал об этом по меньшей мере дважды?