Server Side
建立 Client
$ php artisan passport:client
- 建立成功
Which user ID should the client be assigned to?:
> 0
What should we name the client?:
> api-tester
Where should we redirect the request after authorization? [http://localhost/auth/callback]:
>
New client created successfully.
Client ID: 3
Client secret: FcmidD71HnHWn7kvFXGLclYldekirqf4WtLiL4GF
Postman 測試
Type | URL |
---|---|
POST | http://localhost:8000/oauth/token |
Headers
Key | Value |
---|---|
Accept | application/json |
Content-Type | application/x-www-form-urlencoded |
- Postman 圖示
Body
Key | Value |
---|---|
grant_type | client_credentials |
client_id | 3 |
client_secret | FcmidD71HnHWn7kvFXGLclYldekirqf4WtLiL4GF |
- Postman 圖示
執行結果
Client Side
需另外建立一個 Client 專案
Code
- 下載 Request 套件
# 移至 laravel 資料夾內
$ composer require guzzlehttp/guzzle
- Api request
routes\web.php
Route::get('/token', function () {
$http = new GuzzleHttp\Client;
$response = $http->post('http://localhost:8000/oauth/token', [
'form_params' => [
'grant_type' => 'client_credentials',
'client_id' => '3',
'client_secret' => 'FcmidD71HnHWn7kvFXGLclYldekirqf4WtLiL4GF',
],
]);
print_r(json_decode($response->getBody(), true));
});
- Api response
Array
(
[token_type] => Bearer
[expires_in] => 31536000
[access_token] => eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjAyN2E0Y2ZhODJmY2VkMzg0ZmMzMjU3MGJlYzIzMmMwOGM4OTE1YzliZDQzNTBiYzZjYzRlM2EwZWNiZDBmMTA4Yjk5Mjg3OTU4MDI0YTYwIn0.eyJhdWQiOiIzIiwianRpIjoiMDI3YTRjZmE4MmZjZWQzODRmYzMyNTcwYmVjMjMyYzA4Yzg5MTVjOWJkNDM1MGJjNmNjNGUzYTBlY2JkMGYxMDhiOTkyODc5NTgwMjRhNjAiLCJpYXQiOjE0OTgxMDA3ODYsIm5iZiI6MTQ5ODEwMDc4NiwiZXhwIjoxNTI5NjM2Nzg2LCJzdWIiOiIiLCJzY29wZXMiOltdfQ.BK4mPYp3QKFd3wAOKt5RChWphojMuas2wdJFviqqaSuQvbG4ShzjKNhEM_i95sRv5UzAShI4yTAoUiViUA9U7_Lxh_EV1wrvRbVfdUvuSiC_E9ZgqIy4u5tJE4x-xq96l9IisrhB6R7c1tNTR1BCtbKzHwlm6TONHkahDe6T9FPsqnOWb0CywAEXzLoVmlZ5i5ikFSEGRtXLhhCe8cuPBT18RuV34zhp4CSVbQzd9xk1qYq-8E7IwRfdC5AnDJQSeKzSPojpuQKSREEsAcne--D9y4okr5eHxFKPwQDAR1WydYvFuAt9lXxnVCwD34EmT9A9JBwLE8ezyxn0-adOcTEC2tgOJi7tfspfRUt5SlNVdqbFO6tYvly4SCOUZOHqE-2y_w4pK0naGeb8crHp7U7pWfv0dq0yT-meQrqP70fJuee-x0ZVYHfUhkTgJ0uZfywOwCKMgAVu1GJxJy-sqoAzU0JZCT3ANAyE45JjIdh0j1qPtcj9m0AgxLWou2lUqKprvERCj-YDnElx56_QEAGdCsEQjsb_OBqHaAgjPwcLjFWagHJSUbnYNJnKhNPOzFB3xE8FvQOkksLAMdxFDbvQD5ZLnGfqVaQlnIIQrLLJRInZxDDY8Lgm9i66LDcnPHmU1eRr4XoLTTUahpmuHLzkhyVI1yQrks-UB96vM8E
)
Internal request
- Api request
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
class TestApi extends Controller
{
public function getToken(Request $request)
{
$request->request->add([
'grant_type' => 'client_credentials',
'client_id' => 3,
'client_secret' => 'FcmidD71HnHWn7kvFXGLclYldekirqf4WtLiL4GF',
]);
$proxy = Request::create(
'oauth/token',
'POST'
);
return json_decode(Route::dispatch($proxy)->getContent(), true);
}
}
- Api response
Array
(
[token_type] => Bearer
[expires_in] => 31536000
[access_token] => eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjEzMDJiODA5MGY2ZDQ3YjRkMTRhODY4YzMzYzY2MDgwZGU5OTZkMTJkMGZjZDRmNzUyMmE3NzFmZDhmMGQ4MzQ0NTkxZmNlY2E0MDZiOGJjIn0.eyJhdWQiOiIzIiwianRpIjoiMTMwMmI4MDkwZjZkNDdiNGQxNGE4NjhjMzNjNjYwODBkZTk5NmQxMmQwZmNkNGY3NTIyYTc3MWZkOGYwZDgzNDQ1OTFmY2VjYTQwNmI4YmMiLCJpYXQiOjE0OTgxMjczMjEsIm5iZiI6MTQ5ODEyNzMyMSwiZXhwIjoxNTI5NjYzMzIxLCJzdWIiOiIiLCJzY29wZXMiOltdfQ.JwcQBy5_HVp414TWPxWwCnERzpFWToVGIekanO798Ws-rGNOR4IN-UOahkPGpG6wHWeX0CLNUTBuYCYBfNgU3SbqHi5UGV3RBLjJ-nrp8Qrw7mN3Pk-PzetPdc-3eSqp4bhQQFoUGXnX8teue__bCzSn0ZH_2i-DRQCpmAso-vpRhARSxuIVTl59erjcuFBSvyCfNOeBTQOfQvdBjABQKLWiyOzuKfvI9xVQOehKtnt1TQSjpg1tGzrtxz7dfrMU18jIeGsXJdOp7YRqNLZJUsquDv0_rSVwjas-CipGEQK1GqV-0VQFdgK37Em2S_W63MnNgY8Va3gFrKy-mn93JKY86aJEyD1N5_NBLFMsJrZzPSyzfK2Mn5_UlvfJPGRYMbAmVoAr185GRdofImBFMyjscijJUQoCiqj14_Xg_aR7zViGKJkNX83PGFE_F_r-J9ZdvywkKIC0aVz_Om3jhmKzhDYxiFH6FfdO-RGDDhoq8Fdq4QQbg1xb5ooGLN2noFN7grXO2rnBijiV_XZlzEVqsnmGjwmR-uXULBitTTf2yystNEuInAAJp2EFSQywTARcKA7K8Qq5ll2Kmm42CAS2V94H4r4HT5lYb_CPhxhxRYMaADsmwpABAluexg9F0DsYPvZDMXtNMLpmFZMIilmGZKvO43H8IEjftUjOCSA
)