2

我想构建一个微服务架构。它应该有 13 个微服务和 3 个客户端(2 个 Web 和 1 个移动)。

在我们的场景中,我们有:

  • 员工:对特定和共享服务的访问权及其凭据存储在 Active Directory 中;
  • 管理员:他们是具有完全访问权限的员工。他们拥有特定的共享服务,并且他们的凭据存储在 Active Directory 中;
  • 客户:对特定和共享服务的访问权及其凭据存储在身份微服务中。

我们将拥有一个 API 网关。

每个请求都由 API Gateway 处理,API Gateway 应该(或调用负责人)检查请求的令牌是否有效,识别它是客户、员工还是管理员,并检查该用户是否有权访问请求 API/微服务。

我对这个解决方案有一些误解,所以我很感激一些帮助:

  • API 网关的职责是什么?
  • 身份微服务职责是什么?
  • 如何管理定义员工、客户和管理员可以访问或不可以访问哪些 API/微服务?
  • 如何识别给定用户是客户、员工还是管理员?
4

1 回答 1

2

API 网关的职责是什么?

API 网关可以理解为一种服务,它位于所有其他服务之前,让您将这些服务公开给客户端。在这样做的过程中,它允许所有流量通过它自己,因此它可以做很多事情,比如

  • 安全
  • 日志记录
  • 路由
  • 版本控制
  • 转型

您有一个带有标头的传入请求,您需要将其传递给实际处理请求的下游服务。API 网关几乎可以像上面提到的那样做介于两者之间的所有事情。

身份微服务职责是什么?

身份是帮助您唯一识别用户的一组数据。在您的情况下,您有 Active Directory,其中包含所有员工的身份信息。同样,您可以保留有关客户的信息就是这样一种服务。身份应全权负责帮助您识别他的用户的基本人口统计信息。除此之外,此类服务可能需要提供有关使用身份的安全性。

身份可以具有角色,并且服务在相互通信时需要传递告知下游服务有关身份的信息以及该服务可以验证正在传递的身份信息的一些方法。

这就是 OAuth 发挥作用的地方,如果您添加身份、身份提供者和授权,您将获得称为 OIDC 或 OpenID Connect 的东西

有了这个,您应该能够为每个身份定义角色,然后让各个服务决定具有特定角色的特定身份可以做什么或不能做什么。

如何识别给定用户是客户、员工还是管理员?

好吧,您可以使用角色来识别(如果您可以将角色添加到您的身份中),或者只是让您的身份服务为您回答这个问题。传递 userId 并让服务根据此用户数据的来源告诉您它是什么类型的用户。除非我有更多的洞察力,否则很难回答这个问题。

于 2018-03-01T16:54:37.523 回答