Я работаю над приложением с микросервисной архитектурой. Каждый микросервис может существовать самостоятельно и не зависит от других микросервисов в системе. В каждом микросервисе мы используем CQRS и источники событий, чтобы информировать об изменении состояния в сервисе. Другие службы информируются об этих событиях, если они заинтересованы, и также могут обновлять свои данные.
Пока система работает очень хорошо. Если один микросервис не работает, другие все еще работают. После того, как прерванная служба запустится снова, она получит все события, произошедшие в ее отсутствие, и обновит свое собственное состояние в зависимости от этих событий.
Теперь нам нужно защитить наши службы, и для этого мы используем IdentityServer. У нас есть еще одна служба, наша служба безопасности, которая будет вызываться другими микросервисами для получения токена. Это первый случай, когда микросервис должен напрямую взаимодействовать с другим микросервисом.
Моя проблема с этим подходом заключается в том, что если сервер безопасности не работает, вся система не работает.
Я думаю о следующем решении:
Каждый микросервис должен сохранять пользовательские данные в своей собственной базе данных. Если пользователь обращается к микросервису, он аутентифицируется внутри службы без удаленного вызова службы безопасности. Мне по-прежнему нужна служба безопасности, чтобы просто управлять пользователями. Изменения пользователей снова вызовут события, и другие микросервисы смогут обновлять свои пользовательские данные. Конечно все с https. И, возможно, чтобы уменьшить избыточный код в целях безопасности, я мог бы использовать пакет nuget.
Как вы думаете, это разумный подход?
Спасибо за советы