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
)

results matching ""

    No results matching ""