Laravel 經過 Passport 實現 API 請求認證:隱式受權令牌

隱式受權令牌和經過受權碼獲取令牌有點相似,但不須要獲取受權碼就能夠將令牌返回給客戶端,一般適用於同一個公司自有系統之間的認證,尤爲是客戶端應用不能安全存儲令牌信息的時候。php

後端系統設置

首先在後端系統 AuthServiceProviderboot 方法中調用 enableImplicitGrant 方法:前端

public function boot()
{
    // 啓用隱式受權令牌
    Passport::enableImplicitGrant();
}

在開放平臺 blog 中註冊對應的測試應用 testapp,在 blog 項目根目錄下運行如下命令來註冊 testappweb

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 方法: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 實現要更復雜,因此使用場景有限,不過若是在某些安全性要求比較高的場景下,不能在客戶端存儲令牌信息,則能夠選擇這種獲取令牌的方式訪問後端認證接口。測試

相關文章
相關標籤/搜索