我的任务是为客户构建外部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服务器和应用程序服务器作为单独的站点更好,还是可以将它们合并到一个应用程序中?
感谢您的任何建议。
答案 0 :(得分:3)
虽然建议使用通行证,但您仍可以通过为用户提供api_token
属性来使用简单的API身份验证。如果您在请求标头中设置该标记,Laravel将自动对用户进行身份验证。虽然您必须使用auth:api
中间件。
如果您使用auth:api
中间件,则可以在控制器$user = Auth::guard('api')->user();
中执行此操作,它将自动返回发送请求的用户。
这篇文章很好地解释了该怎么做:https://gistlog.co/JacobBennett/090369fbab0b31130b51。它提供了以下步骤:
api_token
作为字符串使用routes/api.php
Route::group(['middleware' => 'auth:api', 'prefix' => 'v1'], function() {
Route::resource('tickets', 'TicketController');
});
你很高兴。
只要您在控制器中定义Route::resource()
和/tickets
,/tickets/123
同时处理public function index()
和public function show()
。
api调用的网址看起来像http://website.com/api/v1
,因为我使用v1
为该组添加了前缀。