我即将启动一个由多个微服务组成的项目,我正在研究如何实现每个微服务的授权。 我的架构如下: 一个由 Angular 2 的 ASP.NET Core 站点组成的 Web 项目。每个模块(菜单项及其子菜单)都将与微服务通信(每个微服务都有一个数据库)。 每个微服务都有自己的权限。例如,MS1 将有 CRUD 产品,MS2 将有 CRUD 订单等。 我的问题是:
.NET Core 现在提供了足够的基础设施来将身份验证实现到微服务中。我已经使用 .NET Core 3.0 实现了一些基本解决方案,您可以从 github 获取代码:https://github.com/optiklab/actio_3.0
如果您需要更多示例,我还可以更新代码。 LMK
微服务不应与其他微服务共享功能。它是一个功能单元。如果您的许多服务都使用相同的代码,那么将一些通用代码库扩展到各种不同的微服务中并没有什么问题。更好的是 - 在某个库中编写所有通用代码并让所有代码都包含/导入它。
我认为您可能会将代码级别与微服务(功能级别)混淆。
关于授权问题:正如问题评论中所述,不清楚那里讨论的是哪种授权。如果您指的是微服务的用户,那么使用一个身份验证网关来处理所有传入请求然后(一旦获得授权,将请求重新路由到实际服务)可能是有意义的。从这个意义上说,在云内部,不需要授权,从而可以更轻松地进行服务间通信。只有来自外部的请求才需要授权。 或者您可以在每项服务中进行授权。不过,这对我来说意义不大。如果您采用这种方法,您可以将通用代码(授权或其他任何内容)作为库。
axios.post(`http://localhost:12000/api/whateveryourURL`, payload, {
headers:{
"Authorization":`Bearer ${JSON.parse(sessionStorage.getItem("token")).jwtToken}`
}
})
因此,根据我对您问题的理解,我认为您不必在后端多次执行相同的代码来进行授权。