在微服务架构中实现对象级原始权限

implementation of object level raw permissions inside microservice architecture

我有一堆微服务运行。我有一个 api 网关,可以将消费者连接到所有这些服务。现在在某些服务上我需要授予某些用户权限(用户存储在单独的用户服务中)。例如,如果我有一个博客服务,我需要只给 blog 1blog 2blog 3 查看权限 user 1 而不是 user 2 (场景是acl 我认为不是 RBAC 或 ABAC,如果我有问题请纠正我)。现在我应该如何实施权限系统。

例如,如果按照建议 将每个实体对象的权限存储在每个微服务中,那么我的每个服务都必须了解用户并授予他们权限。这种情况将迫使我在所有微服务之间同步用户数据(关于用户删除更新...)。

另一个解决方案是创建一个单独的通用授权服务来管理所有服务权限。但是这个解决方案需要我保存每个微服务模式(并且必须在更改时同步该模式)

或者还有其他解决办法。请帮忙。如何实现ACL(授权)

一种解决方案是将userID 引入到网关的下游路径中。所以路径

GET /blogs/{blogId} 

暴露在网关上,但这变成了

GET /blogs/{userId}/{blogId} 

在博客微服务上。网关处理用户的不记名令牌并将用户的 ID 注入到下游团队调用中。然后,博客微服务将为 "valid" 路径 return 博客,如果路径无效,则返回 404。

这里有说明:

the backend service maintains which users have access to which blogs?

博客微服务存储和管理博客。博客可以有一个与之关联的访问列表。该列表可能只包含博客所有者用户,也可能包含多个用户。关键是 ACL 不是集中式的,而是分布在每个包含它的博客数据中。

if a user is deleted

那么你有两个选择。如果用户被删除,你发布一个 UserDeleted 事件,博客服务被订阅。然后您可以管理所有在其 ACL 中包含该用户的博客并将其删除。或者,你无能为力。我个人会选择后者;拥有微服务架构的一个特点是某些数据将不一致。如果你需要绝对的一致性,那么你可以有一个 "caretaker" 过程来从博客 ACL 中删除已删除的用户。或者不使用微服务。