【问题标题】:Laravel passport, Oauth and microservicesLaravel 护照、Oauth 和微服务
【发布时间】:2020-02-02 21:10:25
【问题描述】:

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

计划

  • 我将有多个微服务(不同的 laravel 项目、catalog.microservice.com、billing.microservice.com),每个微服务都提供一个 API。
  • 除此之外,还有一个使用这些 API 的 Angular 前端。
  • 感谢 laravel 5.3 护照,我现在将拥有另一个用于身份验证的微服务 (passport.microservice.com),这更加容易。

流程:

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

问题:

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

【问题讨论】:

    标签: laravel oauth oauth-2.0 microservices


    【解决方案1】:

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

    因此,除了您的 passport.ms.com 之外,您还有一些代理可以检查标头中的访问令牌,如果它无效 - 给出错误。如果令牌有效 - 将请求代理到相应的微服务。

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

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

    简而言之,您的微服务不应该关心传入的请求是否经过身份验证 - 它已经为它们进行了预过滤。微服务只决定用户 X 是否可以做动作 Y。

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

    【讨论】:

      【解决方案2】:

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

      这样做的一个好处是您的客户只需要记住一个网址。

      示例:只需要 microservice.com 而不需要 catalog.microservice.com、users.microservice.com、passport.microservice.com 等

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

      这是描述此架构的图片的链接。

      Api Architecture image

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 2018-02-19
        • 1970-01-01
        • 2018-07-26
        • 2018-03-20
        • 2020-10-28
        • 2019-02-10
        • 2018-08-26
        • 2017-06-06
        相关资源
        最近更新 更多