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授權畫面將會顯示:
在點擊'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中文網其他相關文章!