.NET微服务授权

问题描述 投票:0回答:3

我即将启动一个由多个微服务组成的项目,我正在研究如何实现每个微服务的授权。 我的架构如下: 一个由 Angular 2 的 ASP.NET Core 站点组成的 Web 项目。每个模块(菜单项及其子菜单)都将与微服务通信(每个微服务都有一个数据库)。 每个微服务都有自己的权限。例如,MS1 将有 CRUD 产品,MS2 将有 CRUD 订单等。 我的问题是:

  1. 正如我上面提到的,每个微服务都有自己的数据库(例如,MS1 将保存产品数据库,MS1 将保存订单数据库等)。那权限呢?这些东西存放在哪里比较好?
  2. 微服务不应与其他微服务共享代码,但我认为执行实际身份验证检查( IsAlllowed(PermissionType) )的代码将在每个微服务中重复。这会导致代码冗余。
.net authorization microservices
3个回答
1
投票

.NET Core 现在提供了足够的基础设施来将身份验证实现到微服务中。我已经使用 .NET Core 3.0 实现了一些基本解决方案,您可以从 github 获取代码:https://github.com/optiklab/actio_3.0

如果您需要更多示例,我还可以更新代码。 LMK


0
投票

微服务不应与其他微服务共享功能。它是一个功能单元。如果您的许多服务都使用相同的代码,那么将一些通用代码库扩展到各种不同的微服务中并没有什么问题。更好的是 - 在某个库中编写所有通用代码并让所有代码都包含/导入它。

我认为您可能会将代码级别与微服务(功能级别)混淆。

关于授权问题:正如问题评论中所述,不清楚那里讨论的是哪种授权。如果您指的是微服务的用户,那么使用一个身份验证网关来处理所有传入请求然后(一旦获得授权,将请求重新路由到实际服务)可能是有意义的。从这个意义上说,在云内部,不需要授权,从而可以更轻松地进行服务间通信。只有来自外部的请求才需要授权。 或者您可以在每项服务中进行授权。不过,这对我来说意义不大。如果您采用这种方法,您可以将通用代码(授权或其他任何内容)作为库。


0
投票

axios.post(`http://localhost:12000/api/whateveryourURL`, payload, { headers:{ "Authorization":`Bearer ${JSON.parse(sessionStorage.getItem("token")).jwtToken}` } })

因此,根据我对您问题的理解,我认为您不必在后端多次执行相同的代码来进行授权。

© www.soinside.com 2019 - 2024. All rights reserved.