首页 > 解决方案 > 使用微服务和网关进行身份验证和授权

问题描述

我正在尝试学习微服务架构。我有点困惑我应该如何使用微服务和网关应用程序进行身份验证和授权。

对于这种情况,假设我为电子商务应用程序提供以下服务: 1. AccountService(管理用户帐户) 2. Listing Service(管理应用程序上的产品列表) 3. Cart 服务(管理用户帐户) 4. 订单服务(管理应用程序上用户订单的处理)。

从我读过的诸如此类的内容,总是会提到“身份验证服务器”。所以,我的第一个问题是这个身份验证服务器到底是做什么的?它的名字告诉我它对应用程序的用户进行身份验证。但是,这是否意味着这个 Auth 服务器必须存储用户数据?那么,将存储用户帐户信息的 Accounts Service 用作存储有关用户的所有信息的身份验证服务器是否有意义?或者,Auth 服务器是它自己的微服务吗?如果是这样,它会存储哪些关于用户的信息而帐户用户没有?我应该让网关应用程序成为身份验证服务器,因为所有请求都必须通过它吗?

我的第二个问题与微服务之间的授权有关。具体来说,它是如何工作的?根据我的研究,这似乎是通过存储权限的令牌完成的。对于许多技术堆栈(无论是 PHP 的 Laravel、Adonis 等框架的 Javascript、Java Spring 等),OAuth 的包通常都可以广泛使用。所以,我猜想隐藏内部工作的包会导致我的困惑。但是,无论如何......根据我的研究,似乎标准做法是让 OAuth 服务器(再次,从第一个问题,不管这意味着什么)处理身份验证,而单个微服务处理授权。具体来说,这是通过包含权限的令牌完成的。那么,微服务如何准确地验证这些权限呢?

我是否只是在各个包中安装了相同的 OAuth 包并使用它们的授权功能?但是,这不是将服务与那一项技术结合起来,这违反了微服务的理念吗?或者,我是否也对网关应用程序进行了授权,并且其他微服务只是资源存储库,因为它们无论如何都不能被公众直接访问(假设它是 Dockerized)?还是其他方式?

再次感谢您的帮助。同样,我仍在尝试围绕微服务架构进行思考。所以,对不起,如果这些问题听起来太琐碎或愚蠢。:)

标签: microservices

解决方案


您有不同的问题,我将尝试一一回答

认证服务器

顾名思义,它是身份验证服务器。您可以利用第三方身份验证服务器(Azure Active Directory 或 auth0 ( https://auth0.com)) 或者您可以创建自己的。当您创建自己的(不推荐的做法)时,您必须自己管理从令牌到安全性和维护用户数据库的所有内容,这在您的情况下是另一个微服务。Auth 服务器所做的只是为您提供验证用户身份的访问令牌。但是您可能只需将少量用户信息保存到数据库中即可运行您的业务逻辑。例如,您的购物应用程序向购物用户提供基本/标准/高级服务,并且只有在您的数据库中保存了用户 ID 时才能确定特定用户订阅了哪些服务。所以你的身份验证服务器只负责给你令牌,然后你负责运行节目。

API 网关

API 网关是您的微服务的入口。网关用作单点入口和卸载用户身份验证、TLS 等。通常,您的 API 网关负责与 Auth 服务器通信并带回您可以在 API 网关中验证的访问令牌。

在其他微服务中使用该令牌取决于您如何部署微服务。APIgateway 通常是公共 IP,用于进入您的系统。但是,如果您部署的所有其他微服务都是面向公众的(具有公共 IP),那么您也必须保护它们。任何拥有公共 IP 的人都可以访问您的微服务,甚至无需访问网关。在这种情况下,您必须在每个进入任何面向公众的微服务的请求时验证令牌。但是,如果您在集群(Kubernetes 等)中部署您的微服务,这些微服务只能在集群内访问私有 IP,那么您不必担心身份验证。只有您的 API 网关可以访问集群,并且集群位于虚拟网络/防火墙后面。因此,您的网关是流量进出的唯一途径。

希望有帮助!


推荐阅读