【发布时间】:2019-07-11 01:51:49
【问题描述】:
我正在尝试学习微服务架构。我对如何使用微服务和网关应用程序进行身份验证和授权感到有些困惑。
对于这种情况,假设我为电子商务应用程序提供以下服务: 1. AccountService(管理用户账户) 2. Listing Service(管理应用上的产品列表) 3. 购物车服务(管理用户账户中的商品) 4. Order Service(管理应用上用户订单的处理)。
从我读过的诸如this 之类的内容中,总是提到“身份验证服务器”。所以,我的第一个问题是这个身份验证服务器到底是做什么的?它的名字告诉我它对应用程序的用户进行身份验证。但是,这是否意味着这个 Auth 服务器必须存储用户数据?那么,将存储用户帐户信息的 Accounts Service 用作存储有关用户的所有信息的身份验证服务器是否有意义?或者,Auth 服务器是它自己的微服务吗?如果是这样,它会存储哪些关于用户的信息而帐户用户没有?我是否应该让网关应用程序成为身份验证服务器,因为所有请求都必须通过它?
我的第二个问题与微服务之间的授权有关。具体来说,它是如何工作的?根据我的研究,这似乎是通过存储权限的令牌完成的。对于许多技术堆栈(无论是 PHP 的 Laravel、Adonis 等框架的 Javascript、Java Spring 等),OAuth 的包通常都可以广泛使用。所以,我猜想隐藏内部工作的包会导致我的困惑。但是,无论如何......根据我的研究,似乎标准做法是让 OAuth 服务器(再次,从第一个问题,不管这意味着什么)处理身份验证,而单个微服务处理授权。具体来说,这是通过包含权限的令牌完成的。那么,微服务如何准确地验证这些权限呢?
我是否只是在各个包中安装了相同的 OAuth 包并使用它们的授权功能?但是,这不是将服务与那一项技术结合起来,这违反了微服务的理念吗?或者,我是否也对网关应用程序进行了授权,并且其他微服务只是资源存储库,因为它们无论如何都不能被公众直接访问(假设它是 Dockerized)?还是其他方式?
再次感谢您的帮助。同样,我仍在尝试围绕微服务架构进行思考。所以,对不起,如果这些问题听起来太琐碎或愚蠢。 :)
【问题讨论】:
-
我建议在进入框架和实现之前阅读tools.ietf.org/html/rfc6749、tools.ietf.org/html/rfc7519、stackoverflow.com/a/53988717/1235935、stackoverflow.com/a/54011649/1235935。一旦你理解了这些,你将能够提出更具体的问题,这会带来很多答案。这个问题太宽泛了,没法回答
标签: microservices