Laravel护照,Oauth和微服务

And*_*rtu 7 oauth oauth-2.0 laravel microservices

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

计划

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

流程:

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

问题:

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

Den*_*nko 8

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

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

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

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

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

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