如何在微服务和 API 网关架构中验证和授权不同的配置文件
How to authenticate and authorize different profiles in a microservices and API Gateway architecture
我想构建一个微服务架构。它应该有 13 个微服务和 3 个客户端(2 个 Web 和 1 个移动客户端)。
在我们的场景中,我们有:
- 员工:对特定和共享服务的访问及其凭据存储在 Active Directory 中;
- 管理员:他们是具有完全访问权限的员工。他们拥有特定的共享服务,并且他们的凭据存储在 Active Directory 中;
- 客户:对特定和共享服务的访问及其凭据存储在身份微服务中。
我们将有一个 API 网关。
每个请求都由 API 网关处理,网关应该(或调用负责人)检查请求的令牌是否有效,确定它是客户、员工还是管理员,并检查该用户是否有权访问请求 API/microservice.
我对这个解决方案有一些误解,因此非常感谢您的帮助:
- API 网关职责是什么?
- 身份微服务的职责是什么?
- 如何定义员工、客户和管理员可以访问或不可以访问哪些 APIs/microservices?
- 如何识别给定用户是客户、员工还是管理员?
What are API Gateway responsibilities?
API 网关可以理解为一种服务,位于所有其他服务之前,让您将这些服务暴露给客户端。
在这样做时,它允许所有流量通过自身,因此它可以做很多事情,例如
- 安全
- 日志记录
- 路由
- 版本控制
- 转型
您有一个带有 headers 的传入请求,您需要将其传递给实际处理该请求的下游服务。 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 并让服务根据此用户数据的来源告诉您它是哪种用户。
除非我有更多的见识,否则很难回答这个问题。
我想构建一个微服务架构。它应该有 13 个微服务和 3 个客户端(2 个 Web 和 1 个移动客户端)。
在我们的场景中,我们有:
- 员工:对特定和共享服务的访问及其凭据存储在 Active Directory 中;
- 管理员:他们是具有完全访问权限的员工。他们拥有特定的共享服务,并且他们的凭据存储在 Active Directory 中;
- 客户:对特定和共享服务的访问及其凭据存储在身份微服务中。
我们将有一个 API 网关。
每个请求都由 API 网关处理,网关应该(或调用负责人)检查请求的令牌是否有效,确定它是客户、员工还是管理员,并检查该用户是否有权访问请求 API/microservice.
我对这个解决方案有一些误解,因此非常感谢您的帮助:
- API 网关职责是什么?
- 身份微服务的职责是什么?
- 如何定义员工、客户和管理员可以访问或不可以访问哪些 APIs/microservices?
- 如何识别给定用户是客户、员工还是管理员?
What are API Gateway responsibilities?
API 网关可以理解为一种服务,位于所有其他服务之前,让您将这些服务暴露给客户端。 在这样做时,它允许所有流量通过自身,因此它可以做很多事情,例如
- 安全
- 日志记录
- 路由
- 版本控制
- 转型
您有一个带有 headers 的传入请求,您需要将其传递给实际处理该请求的下游服务。 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 并让服务根据此用户数据的来源告诉您它是哪种用户。 除非我有更多的见识,否则很难回答这个问题。