Я строю систему на основе архитектуры микросервисов.Существует определенная степень взаимодействия между службами, в которой одна или несколько служб зависят от возможностей других.Клиенты не знают о внутренней архитектуре системы, и все, что они знают, - это API, который представляет собой не что иное, как набор стандартных конечных точек REST, которые создают впечатление единой, тесно связанной монолитной системы.Аутентификация в системе может принимать различные формы, такие как JWT, базовая аутентификация (для разработки), сеансы на основе файлов cookie и, возможно, даже сертификаты PKI.
Предположим, что система содержит 3 микросервиса A, B иС, работающий в localhost ради простоты.Видя, что некоторые сервисы опираются на возможности других через HTTP, я подумал о настройке Apache таким образом, чтобы упростить проектирование и разработку каждого сервиса.В частности, следующее описывает рабочий процесс, который я имел в виду:
1) каждый раз, когда поступает запрос, Apache будет выполнять обязанности аутентификации: это будет связано с взаимодействием со службой аутентификации, единственной ролью которой является обеспечение правильности запросовпроверку подлинности.Я не знаю, как настроить Apache для этой цели, или даже если это вообще возможно.
2) когда обнаруживается, что запрос правильно аутентифицирован (как это передается?)следует направить к соответствующему микросервису, изменив конечную точку, добавив идентификатор пользователя к его пути;например, для идентифицированного идентификатора пользователя # 123 запрос GET http://domain.app/thing/456
будет перенаправлен на http://localhost:3500/123/thing/456
.Это фактически означает, что каждая служба делает предположение, что все полученные запросы ARE аутентифицированы.
3), когда проверка подлинности не проходит, должен быть выдан стандарт 401 и запрос прекращен.
Преимуществоэтой установки (на мой взгляд) является упрощение кода, управляющего микросервисами, а также того, как они взаимодействуют друг с другом.Требование только идентификатора пользователя в URL-адресе запроса означает меньшую сложность при вызове другой службы.
Каков стандартный способ решения этой проблемы?Я искренне обеспокоен последствиями безопасности для эффективного запуска множества сервисов, которые НЕ требуют какой-либо аутентификации, поскольку они полностью полагаются на HTTP-сервер для этой цели.Это составляет единственную точку отказа, которая может иметь катастрофические последствия для безопасности, которые я не могу определить в настоящее время.Любая помощь и указатели будут с благодарностью!