首頁  >  文章  >  php框架  >  詳細介紹Laravel Passport的流程、配置與使用

詳細介紹Laravel Passport的流程、配置與使用

PHPz
PHPz原創
2023-04-23 09:17:581351瀏覽

Laravel Passport是Laravel框架下的一款完整的OAuth2服務端實現, 允許你透過API對使用者身分進行認證和授權,使得API服務可以在無需暴露使用者憑證的情況下進行訪問,這大大降低了客戶端開發的難度,提高了應用程式的安全性。

Laravel Passport背後的OAuth2協議是業界標準,所以你可以使用相同的工具和流程,輕鬆地在其他語言和框架中整合OAuth2認證和授權。下面,本文將詳細介紹Laravel Passport的流程、配置和使用。

安裝Passport

在使用Laravel Passport之前,需要先安裝它。我們可以使用composer指令來安裝Passport,指令如下:

composer require laravel/passport

啟用Passport

Laravel Passport安裝完畢後,需要將其服務提供者新增至config/app.php檔案中的providers在數組中,打開該文件,找到providers數組並添加Laravel Passport的服務提供程序,如下所示:

'providers' => [
    // Other Service Providers...
    Laravel\Passport\PassportServiceProvider::class,
],

創建資料庫表

在使用Laravel Passport之前,還需要新建Passport所需的資料庫表,可以使用以下artisan指令來產生遷移檔案:

php artisan migrate

執行以上指令後,Laravel Passport將在你的資料庫中建立幾個新的表來儲存OAuth2客戶端、Access Token和Refresh Token等數據。

發布設定檔

執行下列artisan指令,將Passport的設定檔發佈到Laravel專案的config目錄下:

php artisan vendor:publish --tag=passport-config

建立金鑰

到此,我們已經做好了使用Laravel Passport所需的前置條件。接下來,我們需要使用以下artisan指令來產生加密金鑰:

php artisan passport:keys

以上指令將產生encryption keys,用於簽署cookie和access token等資料。

設定Passport

完成上述步驟後,我們接下來需要設定Passport,以便使其運作。在config/auth.php設定檔中,將api驅動程式的driver變更為passport,並設定guards和providers,如下所示:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

在同一個檔案中設定providers,如下所示:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
],

一旦設定檔完成, API認證就已經就緒。

建立Route

接下來,我們需要在app/Http路由檔案中建立API路由,如下所示:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

在上述路由範例中,定義了auth :api中間件,用於驗證請求是否來自已認證用戶,若非已認證用戶,則在驗證失敗時傳回401狀態碼。

建立Client

現在,我們已經完成了應用程式配置和API路由的設置,接下來需要建立API客戶端。在Laravel Passport中,提供了artisan指令passport:client,用於建立新的OAuth2客戶端。執行如下所示的指令:

php artisan passport:client --client

在執行指令後,我們需要輸入客戶端名稱和授權重定向URI,如下所示:

php artisan passport:client --client
Which user ID should the client be assigned to? [0]:
 > 1
What should we name the client?
 > Test
Where should we redirect the request after authorization?
 > http://example.com/callback

以上指令將建立一個新的OAuth2客戶端,用於向此應用程式的API發送請求。我們將得到一個客戶端ID和客戶端金鑰,用於後面的API請求中。

取得授權

客戶端已經建立完成,並獲得了授權重定向URI,現在我們需要向該URI發送一個請求,以取得授權。之後,Passport將會為客戶端產生存取令牌,並傳回給該用戶端。使用如下所示的URL,取代其中的Client ID和重定向URI:

http://your-app.com/oauth/authorize?client_id={client-id}&redirect_uri={redirect-uri} &response_type=code&scope=

在輸入URL後,如下所示的OAuth2授權畫面將會顯示:

詳細介紹Laravel Passport的流程、配置與使用

在點擊'Authorize'按鈕後,將會發生授權並重定向到重定向URI。

取得存取權杖

現在,我們已經獲得了授權,並且客戶端已經被授予存取API的權限。我們需要使用OAuth2授權碼,與客戶端金鑰換取存取令牌,我們可以使用如下所示的curl指令,從API授權伺服器取得存取權令牌:

$ curl -X POST -H "Accept: application/json" -F "client_id={client-id}" -F "client_secret={client-secret}" -F "grant_type=authorization_code" -F "code={code}" -F "redirect_uri={redirect-uri}" http://your-app.com/oauth/token

執行以上指令後,將會得到如下所示的JSON對象,其中包含access_token和refresh_token等資訊:

{
    "token_type": "Bearer",
    "expires_in": 86400,
    "access_token": "{access-token}",
    "refresh_token": "{refresh-token}",
}

使用存取權令牌進行API請求

現在,我們已經獲得了存取權令牌,我們可以使用存取令牌與API進行請求。我們需要在API請求頭部中增加Authorization頭,並設定Bearer鑑權方案,將存取權杖作為令牌內容即可,如下所示:

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'http://your-app.com/api/user', [
    'headers' => [
        'Authorization' => 'Bearer '.$accessToken,
        'Accept' => 'application/json',
    ],
]);

在以上程式碼中,我們將存取命令牌以Bearer TOKEN 的格式提交到API服務端進行驗證,成功後將會得到API的回應結果。

總結

在本文中,我們講述了Laravel Passport的流程、配置和使用。使用Laravel Passport,我們可以快速地為API應用程式添加安全的認證和授權,同時支援OAuth2協議,與其他程式語言和框架實現OAuth2授權的應用程式進行互通,這使得開發者能夠快速地建立安全性高、易於使用的API應用程式。

以上是詳細介紹Laravel Passport的流程、配置與使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn