授权时如何在兼顾单一职责的情况下构建高效的微服务架构?

How to build an efficient micro-services architecture while paying attention to single responsibility, when authorizing?

假设我有一个 Authorisation-Service,我需要支持多个用户角色。

假设我想根据用户角色限制对来自 XY-Service 的不同 路由 的访问。我只能想到两个选择:

1) 向 Authorisation-Service 发送请求,它将决定我是否获得授权。这显然效率不高,因为我必须多次与授权服务通信。

2) 使用 JWT,获取用户角色并在 XY-Service 中决定用户是否有权访问resource/route。这样效率更高,但是在微服务中引入了授权逻辑,不应该处理这种逻辑。

我认为您需要将 Netflix Zuul 实现为 API 网关。这提供了各种过滤器,可用于您的特定目的,尤其是验证和路由。 Zuul api 网关很容易通过 spring 引导实现。

JWT 的使用是一种广泛传播的做法,并不违反唯一责任原则,因为唯一责任原则是指非技术 "functional" 责任(业务逻辑),您的微服务在功能上做一个技术上很多:日志记录、安全、跟踪…… 目前,有一种强烈的趋势是通过使用 envoy/istio

将所有这些技术特性移出业务开发本身