Laravel 經過 Passport 實現 API 請求認證:開放平臺篇(客戶端憑證令牌)

客戶端憑證令牌的受權方式不須要走典型的登陸或受權重定向流程,適用於後端與後端應用之間的接口認證,相似作微信、支付寶開放平臺開發,須要先申請本身的應用,申請經過後,這些開放平臺會給開發者分配對應的 APP ID 和 APP SECRET。而後開發者經過這個 APP ID 和 APP SECRET 去開放平臺獲取 Token(令牌),最後拿着這個令牌去訪問認證資源便可。客戶端憑證令牌也是這個思路。php

以測試項目 testapp 做爲客戶端應用,把後端項目 blog 做爲相似微信、支付寶的開放平臺。web

在開放平臺註冊客戶端應用

在開放平臺 blog 中註冊對應的客戶端應用 testapp,在 blog 項目根目錄下運行如下命令來註冊 testapp後端

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

# 顯示結果
CLIENT_ID=11
CLIENT_SECRET=XKmtGXC1CdG2LvhUpdp3y81IjuyrP0rLUPPq8reg

在客戶端應用中定義路由和控制器

在客戶端應用中定義獲取令牌的路由,在 routes/web.php 新增下面行代碼:api

Route::get('/auth/client', 'Auth\LoginController@client');

而後在 LoginController 控制器中編寫對應的 client 方法:瀏覽器

public function client()
{
    $http = new Client();
    $response = $http->post('http://blog.test/oauth/token', [
        'form_params' => [
            'grant_type' => 'client_credentials',
            'client_id' => 11,  // your client id
            'client_secret' => 'XKmtGXC1CdG2LvhUpdp3y81IjuyrP0rLUPPq8reg',   // your client secret
            'scope' => '*'
        ],
    ]);

    return response($response->getBody());
}

測試客戶端應用訪問開放平臺認證接口

在瀏覽器中訪問 http://app.test/auth/client,就能夠獲取到訪問令牌了。微信

客戶端訪問令牌默認長期有效,因此沒有返回用於刷新令牌的 refresh_token 字段。app

能夠經過將返回的 access_token 值添加到 Bearer Authentication 請求頭中,來訪問開放平臺 blog 中須要認證的 API 接口了。post

在後端應用的 routes/api.php 中新增一個測試路由:測試

Route::middleware('client')->get('/test', function (Request $request) {
    return '歡迎訪問後端應用!';
});

在這個路由中應用了 client 中間件,表示該路由須要經過客戶端憑證訪問令牌進行認證才能訪問。code

接下來,在 app/Http/Kernel.php$routeMiddleware 屬性中定義這個中間件:

'client' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class,

在 Postman 中測試這個 API 接口的訪問,將上述 /auth/client 請求返回的 access_token 值添加到 Bearer Token 請求頭中,就能夠獲取到對應的接口返回數據了。

相關文章
相關標籤/搜索