如何跨多个 API 管理会话

How to manage session across multiple APIs

我有一个非常基本的问题,因为我正在看一些与微服务相关的教程。如果我为 1 个应用程序创建多个微服务,我是否需要为所有微服务实施身份验证和授权?例如,如果我有一个电子商务网站,并且我有多个微服务和购买模型的特定端点。

  1. 作为用户,当我登录 UI 时,最初调用 AccountManagement 微服务(它几乎没有 Register/Login/Reset/Revoke 等功能),然后从一个功能转移到另一个临时调用另一个微服务的功能(下一个微服务应该读取 cookie 信息并自动进行身份验证吗?它是如何工作的?
  2. 我的其他微服务是否也具有帐户管理微服务的所有功能或仅通过刷新令牌进行身份验证?

我对微服务中的这个概念还很陌生,并试图通过教程尽可能多地掌握这些问题,但我仍然很难正确理解这些问题。

回答1。 基于令牌的身份验证 为整体构建有状态应用程序总是可以的,但为无状态微服务构建有状态应用程序总是可以的。基于会话的身份验证适用于 Monolith。但是,对于微服务,因为您需要将请求路由到多个独立的服务。为了在我们的系统中保持无状态,我们选择使用令牌身份验证。我们在 jwt 中打包了用户声明。因此,我们需要对微服务进行身份验证。 您可以应用基于 SSO 的方法。

当用户首次从任何前端应用程序登录时,会在 api-gateway 上创建一个名为 jwt-token 的 cookie。 cookie 的域是 .myorg.com,因此所有 myorg.com 子域都可以访问。当任何前端应用程序向 api 网关发出请求时,我们会提取名为 jwt-token 的 cookie(如果已设置)。如果未设置,我们假设用户未登录并且 return 来自 api 网关的 401 状态代码。 如果您的微服务没有暴露在互联网上,您还可以引入基本身份验证。这也将确保减少贵公司内部的任何安全风险。

回答2。 微服务遵循 DDD(域驱动设计)原则,使它们成为独立的小应用程序。您不应添加任何账户管理功能(它是一项独立服务)。其他服务应该有他们的身份验证以及他们的域,可以像客户、支付、审计等。

参考这些文章:

  1. https://medium.com/technology-learning/how-we-solved-authentication-and-authorization-in-our-microservice-architecture-994539d1b6e6
  2. https://medium.com/walmartglobaltech/building-domain-driven-microservices-af688aa1b1b8