I\xe2\x80\x99m 正在尝试学习微服务架构。我对如何使用微服务和网关应用程序进行身份验证和授权感到有点困惑。
\n\n对于这种情况,假设我为电子商务应用程序提供以下服务:\n1。AccountService(管理用户帐户)\n2. 列表服务(管理应用程序上的产品列表)\n3. 购物车服务(管理用户\xe2\x80\x99s帐户中的项目)\n4. 订单服务(管理应用程序上用户订单的处理)。
\n\n从我读过的诸如此类的内容中,总是提到 \xe2\x80\x9cauth 服务器。\xe2\x80\x9d 那么,我的第一个问题是这个身份验证服务器到底是做什么的?它的名字告诉我它对应用程序的用户进行身份验证。但是,这是否意味着该身份验证服务器必须存储用户数据?那么,让存储用户帐户信息的帐户服务同时也是存储有关用户的所有信息的身份验证服务器是否有意义?或者,Auth 服务器是它自己的微服务吗?如果是这样,它存储了哪些关于用户的信息而帐户用户没有存储?我是否应该将网关应用程序设置为身份验证服务器,因为所有请求都必须通过它?
\n\n我的第二个问题与微服务之间的授权有关。具体来说,它是如何工作的?根据我的研究,这似乎是通过存储权限的令牌来完成的。对于许多技术堆栈(无论是 PHP\xe2\x80\x99s Laravel、Adonis、Java Spring 等框架的 Javascript),OAuth 包通常都可以广泛使用。所以,我想隐藏内部工作原理的包会让我感到困惑。但是,无论如何......根据我的研究,标准做法似乎是让 OAuth 服务器(再次回答第一个问题,无论其真正含义是什么)处理身份验证,而各个微服务处理授权。具体来说,这是通过包含权限的令牌来完成的。那么,微服务如何准确验证这些权限呢?
\n\n我是否只在各个包中安装相同的 OAuth 包并使用它们的授权功能?但是,\xe2\x80\x99 是否会将服务与该技术结合起来,这违背了微服务的理念?或者,我是否也对网关应用程序进行授权,并让其他微服务只是资源存储库,因为无论如何公众都无法直接访问它们(假设其已 Docker 化)?或者其他方式?
\n\n再次感谢您的帮助。同样,我仍在尝试了解微服务架构。所以,如果这些问题听起来太微不足道或太愚蠢,我很抱歉。:)
\n您有不同的问题,我会尽力一一回答
认证服务器
顾名思义,它是身份验证服务器。您可以利用第三方身份验证服务器(Azure Active Directory 或 auth0 ( https://auth0.com )),也可以创建自己的身份验证服务器。当您创建自己的(不推荐的做法)时,您必须自己管理从令牌到安全性和维护用户数据库的所有内容,这是您案例中的另一个微服务。身份验证服务器所做的就是向您提供验证用户身份的访问令牌。但是您可能只需将一小部分用户信息保存到数据库中即可运行业务逻辑。例如,您的购物应用程序向购物用户提供基本/标准/高级服务,并且只有在数据库中保存了用户 ID 时才能识别特定用户订阅的服务。因此,您的身份验证服务器只负责为您提供令牌,然后您负责运行该节目。
API网关
API网关是您的微服务的入口。网关用作单点入口并卸载用户身份验证、TLS 等。通常,您的 API 网关负责与身份验证服务器通信并带回访问令牌,您可以在 API 网关中验证该令牌。
在其他微服务中使用该令牌取决于您部署微服务的方式。APIgateway通常是公共IP,用于进入您的系统。但是,如果您部署的所有其他微服务都是面向公众的(具有公共 IP),那么您也必须保护它们。任何拥有公共 IP 的人都可以访问您的微服务,甚至无需访问网关。在这种情况下,您必须在进入任何面向公众的微服务的每个请求时验证令牌。但是,如果您在集群(Kubernetes 等)内部署微服务,并且只有在集群内才可以访问私有 IP,那么您就不必担心身份验证。只有您的 API 网关有权访问集群,并且集群位于虚拟网络/防火墙后面。因此,您的网关是流量进出的唯一途径。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
3841 次 |
| 最近记录: |