Я создаю микросервисную архитектуру, используя Node JS и Express. Я знаю, что одной из основных функций микросервисов является сервис-ориентированная архитектура, в которой команды могут самостоятельно проектировать, разрабатывать и поставлять свои приложения. Поэтому в моем проекте я считаю, что каждый микросервис предлагает свои API, и они взаимодействуют друг с другом с помощью API, таким образом, каждый микросервис независим и имеет собственную жизнь, ожидающую запроса.
Я пишу этот вопрос, потому что у меня есть несколько сомнений по поводу
аутентификация и связь между микросервисами.
Для аутентификации я провел некоторый тест с JWT для аутентификации API микросервиса, и все работает отлично, это пример экспресс-промежуточного программного обеспечения для аутентификации:
const tokenCheck = (req, res, next) => {
let token = getToken(req);
if (token) {
jwt.verify(token, "password, (err, decoded) => {
if (err) {
throw "Failed to authenticate token.";
} else {
req.user = decoded;
next();
}
});
} else {
throw "No token provided.";
}
};
Используется таким образом:
router.get("/", tokenCheck, Controller.get);
Таким образом, каждый маршрут защищен слоем аутентификации.
Вместо общения между микросервисами я прочитал, что лучше всего использовать API-шлюз, и я нашел для этого эту библиотеку, более того, я прочитал, что лучше добавить промежуточное ПО аутентификации внутри API-шлюза, потому что если вы заново реализуете эти вещи в каждом отдельном микросервисе, вы сначала дублируете код, но, что более важно, у вас есть две разные части программного обеспечения для обслуживания.
Теперь у меня два вопроса:
1) Правильно ли использовать API-шлюз, например , , для установления связи между микросервисами?
2) Если я перенесу промежуточное ПО аутентификации с микросервисов на шлюз API, мне придется удалить промежуточное ПО из маршрутов API, и таким образом API будет незащищенным, если кто-то, кроме шлюза, сделает запросы, и я думаю, что это неправильно, потому что любой может назвать эти маршруты, вместо этого, если я поддерживаю промежуточное программное обеспечение, также является ли mircorservice, если код дублируется, кто-нибудь может сказать мне, как правильно это сделать?