我正在尝试学习微服务架构。我对如何使用微服务和网关应用程序进行身份验证和授权感到困惑。
对于这种情况,可以说我为电子商务应用程序提供了以下服务: 1. AccountService(管理用户帐户) 2.列表服务(在应用程序上管理产品列表) 3.购物车服务(管理用户帐户中的物品) 4.订单服务(管理应用程序中用户订单的处理)。
从我读过的书中,例如this,总是提到“身份验证服务器”。因此,我的第一个问题是该身份验证服务器到底要做什么?它的名称告诉我它可以验证应用程序的用户。但是,这是否意味着此Auth服务器必须存储用户数据?因此,使帐户服务(用于存储用户帐户信息)和身份验证服务器(因为它存储有关用户的所有信息)是否有意义?还是Auth服务器是其自己的微服务?如果是的话,帐户用户不会存储哪些有关用户的信息?我应该将网关应用程序设置为Auth服务器,因为无论如何所有请求都必须通过它?
我的第二个问题与微服务之间的授权有关。具体来说,它是如何工作的?根据我的研究,这似乎是通过存储权限的令牌完成的。对于许多技术堆栈(例如PHP的Laravel,Adonis,Java Spring等框架的Javascript等),通常可以广泛使用OAuth软件包。因此,我想隐藏内部工作原理的软件包会加剧我的困惑。但是,无论如何...从我的研究来看,似乎标准做法是让OAuth服务器(同样,首先回答第一个问题,无论其含义是什么)处理身份验证,而由单个微服务处理授权。具体来说,这是通过包含权限的令牌完成的。那么,微服务如何才能准确地验证这些权限?
我是否在单个软件包中安装了相同的OAuth软件包并使用它们的授权功能?但是,这是否将服务与那一项与微服务理念背道而驰的技术相结合?或者,我是否也对网关应用程序进行了授权,并且其他微服务也只是资源存储库,因为它们无论如何都不能直接由公众访问(假设已被Dockerized)?还是其他方式?
再次感谢您的帮助。再次,我仍在努力围绕微服务架构。因此,如果这些问题听起来太琐碎或愚蠢,对不起。 :)
答案 0 :(得分:1)
您有不同的问题,我将尝试一个接一个地回答他们
身份验证服务器
顾名思义,它是身份验证服务器。您可以利用第三方Auth服务器(Azure Active Directory或auth0(https://auth0.com)),也可以创建自己的服务器。创建自己的方法(不建议这样做)时,您必须自己管理从令牌到安全性的所有内容,并维护用户数据库,而这就是您所需要的另一种微服务。 Auth服务器所做的只是为您提供验证用户身份的访问令牌。但是您可能只需要将少量用户信息保存到数据库中即可运行业务逻辑。例如您的购物应用程序可以为购物用户提供基本/标准/高级服务,并且只有在数据库中保存了用户ID的情况下,才能确定特定用户所订阅的服务。因此,您的身份验证服务器仅负责给您令牌,然后您负责从那里开始表演。
API网关
API网关是您的微服务的入口。网关用作单点进入和卸载用户身份验证,TLS等。通常,您的API网关负责与Auth服务器进行对话,并带回可以在API网关中进行验证的访问令牌。
在其他微服务中使用该令牌取决于您如何部署微服务。 APIgateway通常是用于进入系统的公共IP。但是,如果您部署的所有其他微服务都是面向公众的(具有公共IP),那么您也必须保护它们。具有公共IP的任何人都可以访问您的微服务,而无需访问网关。在这种情况下,您必须在进入任何面向公众的微服务的每个请求中验证令牌。但是,如果您将微服务部署在只能在群集内访问私有IP的群集内(Kubernetes等),那么您就不必担心身份验证。只有您的API网关可以访问群集,并且群集位于虚拟网络/防火墙之后。因此,网关是来来去去的唯一途径。
希望有帮助!