我正在使用Node JS和Express创建微服务架构。我知道微服务的主要特点之一是面向服务的架构,团队可以独立设计、开发和发布他们的应用程序。因此,在我的设计中,每个微服务都提供它们的API,并通过API相互通信,这样每个微服务就是独立的,并且有它自己的生命周期,等待请求。
由于我对微服务之间的身份验证和通信存在几个疑问,所以才写下这个问题。为了进行身份验证,我进行了JWT测试来验证微服务的API,并且一切都运行良好。以下是一个用于身份验证的Express中间件示例:
由于我对微服务之间的身份验证和通信存在几个疑问,所以才写下这个问题。为了进行身份验证,我进行了JWT测试来验证微服务的API,并且一切都运行良好。以下是一个用于身份验证的Express中间件示例:
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将不受保护。我认为这是错误的,因为任何人都可以调用那些路由。如果在微服务中保留中间件,代码就会重复,有没有人能告诉我正确的做法是什么?