Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌

Posted 小伍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌相关的知识,希望对你有一定的参考价值。

隐式授权令牌和通过授权码获取令牌有点类似,但不需要获取授权码就可以将令牌返回给客户端,通常适用于同一个公司自有系统之间的认证,尤其是客户端应用不能安全存储令牌信息的时候。

后端系统设置

首先在后端系统 AuthServiceProviderboot 方法中调用 enableImplicitGrant 方法:

public function boot()
{
    // 启用隐式授权令牌
    Passport::enableImplicitGrant();
}

在开放平台 blog 中注册对应的测试应用 testapp,在 blog 项目根目录下运行以下命令来注册 testapp

php artisan passport:client --personal
> 
> testapp
> http://app.test/auth/implicit/callback

# 显示结果
CLIENT_ID=13
CLIENT_SECRET=GDTgIeNVsQ5tPFbok55deciO5My2TSRtv2FYFFHM

前端应用设置

routes/web.php 里面注册对应的隐式认证路由:

Route::get(\'/auth/implicit\', \'Auth\\LoginController@implicit\');
Route::get(\'/auth/implicit/callback\', \'Auth\\LoginController@implicitCallback\');

在控制器 LoginController 中编写 implicitimplicitCallback 方法:

public function implicit()
{
    $query = http_build_query([
        \'client_id\' => 13,
        \'redirect_uri\' => \'http://app.test/auth/callback\',
        \'response_type\' => \'token\',
        \'scope\' => \'\',
    ]);

    return redirect(\'http://blog.test/oauth/authorize?\'.$query);
}

public function implicitCallback(Request $request)
{
    dd($request->get(\'access_token\'));
}

auth/implicit 路由中发送认证请求到后端系统的 oauth/authorize 路由,如果认证成功会将令牌信息通过传入的 redirect_uri 链接回跳的时候返回。

测试隐式授权认证

首先,我们通过 http://app.test/auth/implicit 获取令牌,访问该链接会跳转到后端应用页面,如果没有登录的话,需要先登录,登录之后会跳转到授权确认页面,确认授权之后,就会根据当前 URL 中的 redirect_uri 参数值跳转回前端应用,并且在 URL 中附加 access_token 信息:

http://app.test/auth/implicit/callback#access_token=xxx&token_type=Bearer&expires_in=31536000

通过锚点返回 access_token 的原因是不会把它们发送到服务器(你可以无论通过 Laravel 还是PHP 都解析不到 access_token),只有客户端才能解析上述锚点里的参数。这也正好符合隐式授权令牌的使用场景:客户端凭证不能被安全存储的移动应用或 javascript 应用。

在 Postman 中,通过上面的 access_token 也可以访问 http://blog.test/api/user 认证接口。

隐式授权令牌也可以用于同域名应用认证 API 接口访问,但是比起前面介绍的通过 Cookie 实现要更复杂,所以使用场景有限,不过如果在某些安全性要求比较高的场景下,不能在客户端存储令牌信息,则可以选择这种获取令牌的方式访问后端认证接口。

以上是关于Laravel 通过 Passport 实现 API 请求认证:隐式授权令牌的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 通过 Passport 实现 API 请求认证:基于 Cookie 的同域名应用篇

每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证

Laravel 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)

Laravel 通过 Passport 实现 API 请求认证:移动端应用篇(密码授权令牌)

Laravel 5.4建站06--API 认证系统 Passport

Laravel 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)