隐式受权令牌和经过受权码获取令牌有点相似,但不须要获取受权码就能够将令牌返回给客户端,一般适用于同一个公司自有系统之间的认证,尤为是客户端应用不能安全存储令牌信息的时候。php
首先在后端系统 AuthServiceProvider
的 boot
方法中调用 enableImplicitGrant
方法:前端
public function boot() { // 启用隐式受权令牌 Passport::enableImplicitGrant(); }
在开放平台 blog
中注册对应的测试应用 testapp
,在 blog
项目根目录下运行如下命令来注册 testapp
:web
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
中编写 implicit
和 implicitCallback
方法:api
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 应用。app
在 Postman 中,经过上面的 access_token
也能够访问 http://blog.test/api/user
认证接口。ide
隐式受权令牌也能够用于同域名应用认证 API 接口访问,可是比起前面介绍的经过 Cookie 实现要更复杂,因此使用场景有限,不过若是在某些安全性要求比较高的场景下,不能在客户端存储令牌信息,则能够选择这种获取令牌的方式访问后端认证接口。测试