Laravel開發:如何使用Laravel Passport和JWT實現API身份驗證?

laravel開發:如何使用laravel passport和jwt實現api身份驗證?

API(Application Programming Interface)身份驗證,是在當今互聯網應用中普遍存在的需求。Laravel作為一款流行的php框架,提供了Laravel Passport和JWT(json Web Tokens)兩種工具,可以幫助我們實現API身份驗證。

本文將介紹如何使用Laravel Passport和JWT實現API身份驗證。在接下來的內容中,我們將了解這兩種工具的基本概念,以及如何在Laravel應用中配置和使用它們。

什么是Laravel Passport?

Laravel Passport是一個專門為Laravel框架開發的OAuth2服務器,可以幫助我們快速安全地構建API身份驗證系統。Passport提供了一組API來執行認證流程,并且已經內部實現了一系列OAuth2協議規定的認證方式。

其中,OAuth2是一種使用代理授權方式的標準協議。代理授權是一個為代表用戶獲取訪問資源的權限的授權機制。OAuth2協議通過向第三方應用頒發“訪問令牌”,來代表用戶訪問受保護的資源。所以,Passport實際上是在Laravel應用中扮演著OAuth2認證服務器的角色。

什么是JWT?

JWT(JSON Web Tokens)是一種用于分布式網絡環境中的身份驗證和授權的開放標準(RFC 7519)。JWT通常被用來在客戶端和服務端之間傳遞被認證的用戶身份信息和聲明。JWT由三部分組成:頭部、載荷和簽名。

通常,頭部包含了JWT的類型和使用的加密算法,載荷包含了用戶身份信息和聲明,簽名用于驗證JWT的真實性。使用JWT進行身份驗證時,服務端通過解密JWT中的信息來判斷用戶身份,從而實現API身份驗證。

配置Laravel Passport和JWT

在使用Laravel Passport和JWT進行API身份驗證前,我們需要先在Laravel應用中進行配置。下面是具體配置步驟:

步驟一:安裝Laravel Passport和tymon/jwt-auth

在命令行工具中使用composer安裝Laravel Passport和tymon/jwt-auth:

composer require laravel/passport composer require tymon/jwt-auth

步驟二:配置Laravel Passport

在config/app.php文件中,添加以下服務提供者:

'providers' => [     ...     LaravelPassportPassportServiceProvider::class, ],

然后,運行以下命令來創建Passport的數據表:

php artisan migrate

對于Passport的默認認證方式“Password Grant”,我們在User模型中增加“PassportHasApiTokens”(Passport默認的用戶認證Trait)。打開User.php文件,增加以下內容:

use LaravelPassportHasApiTokens;  class User extends Authenticatable {     use HasApiTokens, Notifiable;     ... }

步驟三:配置JWT

首先,在config/app.php文件中,添加JWTServiceProvider:

'providers' => [     ...     TymonJWTAuthProvidersLaravelServiceProvider::class, ],

然后,運行以下命令來生成JWT所需的秘鑰:

php artisan jwt:secret

在config/auth.php文件中,增加jwt守衛配置(將jwt作為守衛guard的選項),并將默認的認證驅動器driver設置為“jwt”:

'guards' => [     ...     'jwt' => [         'driver' => 'jwt',         'provider' => 'users'     ], ], ... 'defaults' => [     'guard' => 'jwt',     ... ],

在config/auth.php文件中,增加JWT的用戶提供程序users配置(指示使用Eloquent模型):

'providers' => [     ...     'users' => [         'driver' => 'eloquent',         'model' => AppModelsUser::class     ] ],

使用Laravel Passport和JWT進行API身份驗證

準備工作完成后,我們就可以愉快地使用Laravel Passport和JWT實現API身份驗證了。下面是具體操作流程:

步驟一:注冊API路由

首先,在routes/api.php文件中注冊API路由。例如,我們定義一個用于獲取用戶信息的GET路由:

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

這里使用了Laravel的中間件auth:api,它將確保已認證用戶的請求能夠通過。通過路由中間件,我們在路由中添加了身份驗證的這個步驟。

步驟二:創建訪問令牌

用戶需要通過訪問令牌來訪問API。我們需要使用密碼授權訪問令牌,具體實現步驟如下:

需要先定義一個路由,接收用戶提供的用戶名和密碼:

Route::post('/login', function (Request $request) {     $http = new GuzzleHttpClient;      $response = $http->post('http://your-app.com/oauth/token', [         'form_params' => [             'grant_type' => 'password',             'client_id' => 'client-id',             'client_secret' => 'client-secret',             'username' => $request->username,             'password' => $request->password,             'scope' => '',         ],     ]);      return json_decode((string) $response->getBody(), true); });

在上述代碼中,我們使用了GuzzleHttp客戶端來發送POST請求,獲取訪問令牌。其中,grant_type必須是“password”,client_id和client_secret分別對應Laravel Passport中應用的ID和Secret。請求成功后,將返回一個JSON響應,其中包含用戶訪問API的訪問令牌access_token。

步驟三:發起API請求

我們可以使用獲取到的令牌access_token,向API發送請求,驗證用戶身份,并獲取受保護的資源。在向API發起請求時,必須在header中增加Authorization鍵值對,其值為“Bearer access_token”。例如:

$accessToken = 'your-access-token'; $response = $http->withHeaders([     'Authorization' => 'Bearer ' . $accessToken ])->get('http://your-app.com/api/user');

如果請求成功,API將返回用戶信息。

結論

在Laravel應用中,Laravel Passport提供了強大的OAuth2身份驗證協議和API認證功能,而JWT是一種安全便捷的身份驗證方式。在實際開發中,我們可以結合使用Laravel Passport和JWT,提高API的安全性和可靠性,保護用戶數據不被惡意攻擊者所竊取或篡改。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享