我正在研究使用laravel,laravel passport,lumen和AngularJS开发API消费应用程序
我有3个域名如下
我无法正确配置这些3。我已经设置了 auth.dev ,它会成功生成令牌,我可以在 app.dev 中使用它们。
但我的要求是使用3个独立的API实例,Auth和APP
我尝试通过Lumen配置它(使用auth.dev验证访问令牌),但它无法正常工作。
这是可能的还是有任何建议来实现这一目标?
答案 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中提供的各种范围中间件一起使用。
目前唯一的选择是将这些中间件类(CheckScopes
和CheckForAnyScope
)复制到您的Lumen应用程序中并手动加载它们。但这非常简单,因为它们是基本的。
您可能需要修改它们,以便他们可以通过Authenticatable
类(通常是User
模型)查看从您的OAuth端点返回的范围。
这些解决方案中的任何一个都会为每个请求增加一些开销,因此值得考虑在Lumen端缓存一段时间的结果。
如果你这样做,请确保它没有缓存很长时间,因为它可能允许过期的令牌仍然被视为有效。
或者,将令牌的到期时间存储在缓存中的某个位置,并根据请求的时间验证该令牌是否已过期。
希望这有帮助。