如何将Autra和Lumen的Laravel护照用作api

时间:2017-05-09 12:02:34

标签: php laravel-5 lumen laravel-passport

我正在研究使用laravel,laravel passport,lumen和AngularJS开发API消费应用程序

我有3个域名如下

  • auth.dev - Laravel 5.4 + Passport oAuth服务器(作为auth服务器)
  • api.dev - 流明(作为API版本)
  • app.dev - php + angularjs(单页应用)

我无法正确配置这些3。我已经设置了 auth.dev ,它会成功生成令牌,我可以在 app.dev 中使用它们。

但我的要求是使用3个独立的API实例,Auth和APP

我尝试通过Lumen配置它(使用auth.dev验证访问令牌),但它无法正常工作。

这是可能的还是有任何建议来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我最近一直致力于与此相同的实施。为了使它有效地工作需要花费一点点努力,但它正在工作!

基本上,如果您关心验证您正在接收的令牌(您应该这样做),您需要一种方法将Lumen从客户端应用程序收到的令牌转发到您的OAuth服务并返回该身份验证的一些详细信息到你的流明应用程序。

如果您知道您的Lumen API服务总是在同一台机器上运行,您可以使用某种RPC来不必要地保存通过HTTP - 我在OAuth服务中通过自定义Artisan命令使用命令行界面以及从Lumen那边运行它的自定义脚本,我称之为RemoteArtisan

另一种方法是通过HTTP,基本上使您的OAuth服务提供自己的非常基本的API端点。 routes/api.php中应该这样做:

Route::middleware('client')->get('user', function (Request $request) {
    $helper = new App\FirstPartyClientHelper;

    return response()->json($helper->getTokenOwnerDetails($request->bearerToken()));

});

我的FirstPartyClientHelper是一个简单的类,它解析令牌以从中获取ID,并使用它来从我想要发送回流明的OAuth数据库中获取资源。您可能不需要在这里进行大量查询或发送大量数据,它可能只是一个简单的通过/失败。取决于您的需求。

我建议找出并发送回您的Lumen应用程序的一件事是,为令牌分配了哪些范围。您可能希望将这些与Passport中提供的各种范围中间件一起使用。

目前唯一的选择是将这些中间件类(CheckScopesCheckForAnyScope)复制到您的Lumen应用程序中并手动加载它们。但这非常简单,因为它们是基本的。

您可能需要修改它们,以便他们可以通过Authenticatable类(通常是User模型)查看从您的OAuth端点返回的范围。

这些解决方案中的任何一个都会为每个请求增加一些开销,因此值得考虑在Lumen端缓存一段时间的结果。

如果你这样做,请确保它没有缓存很长时间,因为它可能允许过期的令牌仍然被视为有效。

或者,将令牌的到期时间存储在缓存中的某个位置,并根据请求的时间验证该令牌是否已过期。

希望这有帮助。