隱式受權令牌和經過受權碼獲取令牌有點相似,但不須要獲取受權碼就能夠將令牌返回給客戶端,一般適用於同一個公司自有系統之間的認證,尤爲是客戶端應用不能安全存儲令牌信息的時候。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 實現要更復雜,因此使用場景有限,不過若是在某些安全性要求比較高的場景下,不能在客戶端存儲令牌信息,則能夠選擇這種獲取令牌的方式訪問後端認證接口。測試