Laravel护照,Oauth和微服务

时间:2016-08-24 14:58:30

标签: laravel oauth oauth-2.0 microservices

我在架构方面遇到了困难,并且想知道某人是否有某些见解。

计划

  • 我将提供多个微服务(不同的laravel项目,catalog.microservice.com,billing.microservice.com),每个都提供一个API。
  • 除此之外,还会有一个消费这些API的角度。
  • 由于laravel 5.3护照,我现在将有另一个微服务(passport.microservice.com),这更容易。

流程:

  • 用户访问catalog.microservice.com
  • 用户需要进行身份验证并提供用户和密码
  • 请求由angular(aka客户端)通过密码盛大类型发送至passport.microservice.com以获取授权令牌
  • 现在我有一个令牌,我有权从catalog.microservice.com
  • 调用资源
  • catalog.microservice.com需要知道令牌是否有效并向passport.microservice.com提出请求(某种中间件?)
  • passport.microservice.com返回用户,范围等。

问题:

  • 这是一个好方法吗?
  • catalog.microservice.com中的令牌验证可以是中间件吗?

4 个答案:

答案 0 :(得分:7)

微服务架构中的常见方法是使用单个身份验证“网关”,通常它是API网关的一部分。

除了你的passport.ms.com之外,你还有一些代理会检查来自标题的访问令牌,如果它无效 - 给出错误。如果令牌有效 - 将请求代理到相应的微服务。

这样您就不必重复自己了 - 您不必为每个微服务实现N次身份验证。

然后,如果您需要更精细的控制 - 用户可以访问的内容(通常称为授权),那么您通常会在每个特定的微服务中实现它。

简而言之,您的微服务不应该关心传入的请求是否经过身份验证 - 它已经过预先过滤。微服务仅决定用户X是否可以执行操作Y.

PS。您可以将API网关与Passport / Oauth工具结合使用,也可以单独运行它们 - 这取决于您。 AWS已经提供API网关作为服务(证明时尚微服务正在变得如何),但我找不到任何好的开源类似物。

答案 1 :(得分:0)

您的 api应该具有一个网关,用于处理身份验证并与不同的微服务通信。 在顶层对用户进行身份验证(或拒绝未经授权的用户),合并来自不同服务的响应,然后您的客户端(Web或移动用户)可以使用该数据。

此方法的一个优点是您的客户只需要记住一个URL。

示例:仅需要microservice.com,而不需要 catalog.microservice.com,users.microservice.com,passport.microservice.com等

与许多单独的API地址相比,单个端点地址(URL)更容易记住和配置。

这是描述该体系结构的图像的链接。

Api Architecture image

答案 2 :(得分:0)

enter image description here

将passort micorservice创建为聚合器服务

答案 3 :(得分:-1)

我不是专家,但如果您需要使用不同的应用程序,那么这个流程对我来说没问题。

关于你的第二个问题,是的,这可以是中间件