Microservices 使用微服务和网关进行身份验证和授权

Microservices 使用微服务和网关进行身份验证和授权,microservices,Microservices,我正在努力学习微服务架构。我对如何使用微服务和网关应用程序进行身份验证和授权感到困惑 在这种情况下,假设我为电子商务应用程序提供以下服务: 1.AccountService(管理用户帐户) 2.列表服务(管理应用程序上的产品列表) 3.购物车服务(管理用户帐户中的项目) 4.订单服务(管理应用程序上用户订单的处理) 从我读到的东西中,比如,总是提到“身份验证服务器”。所以,我的第一个问题是,这个身份验证服务器到底做什么?它的名称告诉我它对应用程序的用户进行身份验证。但是,这是否意味着此身份验证服

我正在努力学习微服务架构。我对如何使用微服务和网关应用程序进行身份验证和授权感到困惑

在这种情况下,假设我为电子商务应用程序提供以下服务: 1.AccountService(管理用户帐户) 2.列表服务(管理应用程序上的产品列表) 3.购物车服务(管理用户帐户中的项目) 4.订单服务(管理应用程序上用户订单的处理)

从我读到的东西中,比如,总是提到“身份验证服务器”。所以,我的第一个问题是,这个身份验证服务器到底做什么?它的名称告诉我它对应用程序的用户进行身份验证。但是,这是否意味着此身份验证服务器必须存储用户数据?那么,让存储用户帐户信息的Accounts服务,以及存储用户所有信息的auth服务器,有意义吗?或者,身份验证服务器是否有自己的微服务?如果是的话,它存储了哪些用户信息,而帐户用户没有?我是否应该使网关应用程序成为身份验证服务器,因为所有请求都必须通过它

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

我是否在各个包中安装了相同的OAuth包,并使用它们的授权功能?但是,这两种服务不都是针对这一技术的吗?这与微服务的理念背道而驰?或者,我是否也需要授权网关应用程序,并让其他微服务只是资源存储库,因为它们不能直接供公众访问(假设其已停靠)?还是其他方式


再次感谢你的帮助。再一次,我仍在试图将我的头脑集中在微服务架构上。因此,如果这些问题听起来太琐碎或愚蠢,请原谅。:)

你有不同的问题,我会尝试逐一回答

验证服务器

顾名思义,它是身份验证服务器。您可以利用第三方身份验证服务器(Azure Active Directory或auth0()),也可以创建自己的身份验证服务器。当您创建自己的(不推荐的做法)时,您必须自己管理一切,从令牌到安全性和维护用户数据库,这是您的另一种微服务。Auth server所做的只是为您提供验证用户身份的访问令牌。但是,为了运行业务逻辑,您可能只需要将一小部分用户信息保存到数据库中。e、 g.您的购物应用程序向购物用户提供基本/标准/高级服务,并且只有在您的数据库中保存了用户ID的情况下,才能识别特定用户订阅的服务。因此,您的身份验证服务器只负责向您提供令牌,然后您就负责运行该节目

API网关

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

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


希望有帮助

在讨论框架和实现之前,我建议阅读。一旦你理解了这些,你将能够提出更具体的问题,这将带来许多答案。这个问题太广泛了,无法回答。我认为这很有道理。所以,假设我的系统有一个帐户服务,每个帐户都有一个唯一的ID(一个唯一的帐户只属于一个用户)和其他帐户信息,如电子邮件、简历、生日等。。。。在这种情况下,这个帐户服务也可以在我的系统中作为身份验证服务器使用,这样说是否正确?或者,身份验证服务器仍然是一个独立的服务吗?没错。您可以随意调用它,只要您能够对用户进行身份验证并从中获取访问令牌。通常,此服务是分开的,不会与业务逻辑混合,因此您有一个地方进行身份验证,将来如果需要,更多的服务可以使用相同的服务进行身份验证。看看下面文章的第一部分