客戶端憑證令牌的受權方式不須要走典型的登陸或受權重定向流程,適用於後端與後端應用之間的接口認證,相似作微信、支付寶開放平臺開發,須要先申請本身的應用,申請經過後,這些開放平臺會給開發者分配對應的 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 請求頭中,就能夠獲取到對應的接口返回數據了。