把待接入的第三方應用看做前端系統,把本身的平臺看做後端系統。php
在後端應用 blog
中註冊對應的第三方應用 testapp
,在 blog
項目根目錄下運行如下命令來註冊 testapp
:前端
php artisan passport:client > > testapp > http://app.test/auth/callback # 顯示結果 CLIENT_ID=9 CLIENT_SECRET=Xde5hsAbpEU8MMjwELFh6RNOzxX2LsrxgFTZvXkP
第一步是到後端系統請求受權,若是用戶在後端系統沒有登陸須要先登陸,登陸以後讓用戶確認受權,受權以後經過 callback
配置的跳轉地址回跳到前端應用,而且在 URL 中帶上受權碼,而後用戶再經過這個受權碼獲取訪問令牌,拿到訪問令牌以後就能夠請求後端系統認證 API 接口了。web
因此,須要在前端應用的 routes/web.php
中新增兩個路由:後端
Route::get('/auth', 'Auth\LoginController@oauth'); Route::get('/auth/callback', 'Auth\LoginController@callback');
public function oauth() { $query = http_build_query([ 'client_id' => 9, 'redirect_uri' => 'http://app.test/auth/callback', 'response_type' => 'code', 'scope' => '', ]); return redirect('http://blog.test/oauth/authorize?' . $query); } public function callback(Request $request) { $code = $request->get('code'); if (!$code) { dd('受權失敗'); } $http = new Client(); $response = $http->post('http://blog.test/oauth/token', [ 'form_params' => [ 'grant_type' => 'authorization_code', 'client_id' => 9, // your client id 'client_secret' => "Xde5hsAbpEU8MMjwELFh6RNOzxX2LsrxgFTZvXkP", // your client secret 'redirect_uri' => 'http://app.test/auth/callback', 'code' => $code, ], ]); return response($response->getBody()); }
在瀏覽器中訪問 http://app.test/auth
,在第三方應用中經過後端系統進行受權認證,若是在後端應用 blog.test
上尚未登陸,會先跳轉到登陸頁面,登陸以後則跳轉到確認受權頁面。api
點擊綠色的受權按鈕,就能夠跳轉到第三方應用的回調路由,而後發起獲取令牌的請求獲取訪問令牌。瀏覽器
下次從第三方應用 app.test
中訪問後端系統 API 接口時,就能夠經過在請求頭中帶上 access_token
來獲取 blog.test
上的認證資源了,對應的邏輯和經過密碼獲取令牌訪問是同樣的。app
經過 Postman 進行測試,將 access_token
值拷貝到 Token 字段,而後就能夠發起對認證 API 接口 http://blog.test/api/user
的請求了。post