我想构建一个微服务架构。它应该有 13 个微服务和 3 个客户端(2 个网络客户端和 1 个移动客户端)。
在我们的场景中,我们有:
- 员工:对特定和共享服务的访问权限及其凭据存储在 Active Directory 中;
- 管理员:他们是拥有完全访问权限的员工。他们拥有特定的共享服务,并且他们的凭据存储在 Active Directory 中;
- 客户:对特定服务和共享服务的访问权限及其凭据存储在身份微服务中。
我们将拥有一个 API 网关。
每个请求都由 API 网关处理,API 网关应该(或调用负责者)检查请求的 token 是否有效,识别是否是客户、员工或管理员,并检查该用户是否有权访问请求 API/微服务。
我对此解决方案有一些误解,因此我希望获得一些帮助:
- API 网关的职责是什么?
- 身份微服务的职责是什么?
- 如何定义员工、客户和管理员可以访问哪些 API/微服务?
- 如何识别给定用户是客户、员工还是管理员?
最佳答案
What are API Gateway responsibilities?
API 网关可以理解为位于所有其他服务前面的一项服务,并允许您将这些服务公开给客户端。 这样做时,它允许所有流量通过自身,因此它可以做很多事情,例如
- 安全
- 记录
- 路由
- 版本控制
- 转型
您有一个带有 header 的传入请求,您需要将其传递到实际处理该请求的下游服务。 API 网关几乎可以完成上面提到的所有事情。
What are Identity microservice responsibilities?
身份是帮助您唯一识别用户的一组数据。就您而言,您拥有包含所有员工身份信息的 Active Directory。同样,您可以保留有关客户的信息就是此类服务之一。身份应全权负责用户的基本人口统计信息,以帮助您识别他的身份。除此之外,此类服务可能需要提供使用身份的安全性。
身份可以有角色,服务在相互通信时需要传递告诉下游服务有关身份的信息以及该服务可以验证所传递的身份信息的某种方法。
这就是 OAuth 发挥作用的地方,如果您添加身份、身份提供商和授权,您将获得称为 OIDC 或 OpenID Connect 的东西
有了这个,您应该能够为每个身份定义角色,然后让各个服务决定具有特定角色的特定身份可以做什么或不能做什么。
How to identify if given user is a customer, an employee or an admin?
好吧,您可以使用角色来识别(如果您可以将角色添加到您的身份中),或者只是让您的身份服务为您回答这个问题。 传递 userId,让服务根据用户数据的来源告诉您该用户属于哪种类型。 除非我有更多的洞察力,否则回答这个问题并不困难。
关于architecture - 如何在微服务和 API 网关架构中对不同的配置文件进行身份验证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49051663/