Laravel API项目 - 设计和认证

时间:2017-01-31 03:31:42

标签: laravel api laravel-5

我的任务是为客户构建外部API。在不提供任何业务数据的情况下,数据库包含整个工作流程。生成的事件,相关票证和其他信息,均可由客户区分。

我想用非常简单的端点构建一个api。对于每个表,例如票,我希望有两个端点:

/tickets            #will return a list of tickets and general information
/ticket/<ticket_id> #More detailed information about the specific ticket

对于任何进行身份验证的客户,这些路由只会返回与之关联的数据库记录。

我之前没有在Laravel写过这样的系统。我是否理解Passport是要走的路?我想我问是否有更简单的方法来安全地进行这种类型的身份验证(Passport overkill)?如果我们有一小部分客户,并且可以为他们设置身份验证,那么证书是否会更好?或者现在不使用Passport的OAuth2这样的行业标准是错误的吗?

如果Passport是最好的,将OAuth2服务器和应用程序服务器作为单独的站点更好,还是可以将它们合并到一个应用程序中?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

虽然建议使用通行证,但您仍可以通过为用户提供api_token属性来使用简单的API身份验证。如果您在请求标头中设置该标记,Laravel将自动对用户进行身份验证。虽然您必须使用auth:api中间件。

如果您使用auth:api中间件,则可以在控制器$user = Auth::guard('api')->user();中执行此操作,它将自动返回发送请求的用户。

这篇文章很好地解释了该怎么做:https://gistlog.co/JacobBennett/090369fbab0b31130b51。它提供了以下步骤:

  1. api_token作为字符串
  2. 添加到用户迁移中
  3. 使用routes/api.php

    中的中间件定义分组路线

    Route::group(['middleware' => 'auth:api', 'prefix' => 'v1'], function() { Route::resource('tickets', 'TicketController'); });

  4. 你很高兴。

    只要您在控制器中定义Route::resource()/tickets/tickets/123同时处理public function index()public function show()

    api调用的网址看起来像http://website.com/api/v1,因为我使用v1为该组添加了前缀。