【问题标题】:How to use Laravel passport for Auth and Lumen as api如何将 Laravel 护照用于 Auth 和 Lumen 作为 api
【发布时间】:2017-10-07 17:37:13
【问题描述】:

我正在研究使用 laravel、laravel passport、lumen 和 AngularJS 开发一个使用 API 的应用程序

我有 3 个域如下

  • auth.dev - Laravel 5.4 + Passport oAuth 服务器(作为认证服务器)
  • api.dev - Lumen(作为 API seaver)
  • app.dev - php + angularjs(单页应用)

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

但我的要求是为 API、Auth 和 APP 使用 3 个单独的实例

我尝试通过 Lumen 配置它(使用 auth.dev 验证访问令牌)但它不起作用。

这可能吗?或者有什么建议可以实现吗?

【问题讨论】:

  • 我们需要有关“不工作”的信息。您看到了什么错误/问题,您采取了哪些步骤来复制它?
  • 好吧,当我使用正确的授权信息和结构调用位于 API (Lumen) 的 auth:api 保护路由时,它将返回未经授权的错误。我想从身份验证服务器验证那些路由(位于 API )。

标签: php laravel-5 lumen laravel-passport


【解决方案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 的资源。您可能不需要在这里进行大量查询或发送大量数据,这可能只是简单的通过/失败。取决于你的需要。

我建议弄清楚并将其发送回您的 Lumen 应用程序的一件事是分配给令牌的范围。您可能希望将这些与 Passport 中可用的各种范围中间件一起使用。

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

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

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

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

或者,将令牌的到期时间存储在缓存中的某个位置,并根据请求时间验证该时间,以确保令牌没有过期。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 2020-03-13
    • 2017-01-24
    • 2021-07-16
    • 2019-03-01
    • 1970-01-01
    • 2020-03-14
    • 2019-04-06
    • 2017-09-11
    相关资源
    最近更新 更多