一、JWT Token介紹
JSON Web Token(JWT)是一種用於身份驗證的開放標準,它可以在用戶和服務器之間安全地傳遞信息。在JWT中,用戶的信息被加密,並且可以被驗證和信任,從而提高了Web應用程序的安全性。
JWT由三部分組成,頭部,負載和簽名。頭部指定了令牌類型為JWT,以及簽名算法,如HMAC-SHA256或RSA。負載包含用戶信息,這些信息被稱作聲明(claim),聲明又被分為標準聲明、公共聲明和私有聲明。標準聲明包括JWT例子中的iss(issuer)、exp(expiration time)、sub(subject)等,都是這些JWT實體信息的保留關鍵字;公共聲明包括必要的但不是唯一的信息,比如:所有的聲明都是可選的,也可以自己定義聲明名稱和值;私有聲明是提供者和消費者所共同定義的聲明,用於預防名稱衝突
簽名是將頭部、負載和密鑰進行hash操作來生成的,用於防止JWT在傳遞過程中被篡改。密鑰只有服務器端知道,因此只有服務器端能夠生成有效的JWT簽名。
二、Laravel與JWT Token集成
Laravel作為全球最有影響力的PHP框架,已經內置了對JWT的支持。可以使用Tymon\JWTAuth包來添加JWT身份驗證到Laravel應用程序中。
首先要從composer安裝Tymon\JWTAuth包,使用下面的命令行:
composer require tymon/jwt-auth
然後配置JWT密鑰,可以使用Artisan命令生成一個默認的密鑰。運行下面的命令:
php artisan jwt:secret
以上命令將在您的.env文件中添加JWT_SECRET密鑰。
三、JWT Token身份驗證
在Laravel中,身份驗證通常是通過保護的路由來完成的。在JWT中,您可以使用守衛和中間件來保護路由。JWT默認提供了一種JWTGuard來處理JWT身份驗證,還提供了一種JWTAuthenticateMiddleware來處理身份驗證。
四、實現JWT Token身份驗證的步驟
1、創建用戶模型
首先,我們需要創建一個用戶模型,您可以使用Laravel自帶的命令來創建:
php artisan make:model User
接下來,我們需要在users數據表中添加字段,來存儲用戶信息。
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
2、創建API控制器
接下來,我們需要為API創建一個控制器,用於處理所有的API請求:
php artisan make:controller ApiController
在控制器中,我們需要實現register、login、logout和refresh方法,其實現如下所示:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use JWTAuth;
use JWTAuthException;
class ApiController extends Controller
{
public function register(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password'))
]);
$token = JWTAuth::fromUser($user);
return response()->json(compact('token'));
}
public function login(Request $request)
{
$input = $request->only('email', 'password');
$jwt_token = null;
$user = User::where('email', $input['email'])->first();
$credentials = [
'email' => $input['email'],
'password' => $input['password'],
];
try {
if (!$jwt_token = JWTAuth::attempt($credentials)) {
return response()->json([
'msg' => 'Invalid Email or Password',
], 401);
}
} catch (JWTAuthException $e) {
return response()->json([
'msg' => 'Failed to create token',
], 500);
}
return response()->json(['token' => $jwt_token]);
}
public function logout(Request $request)
{
try {
JWTAuth::invalidate(JWTAuth::getToken());
return response()->json([
'msg' => 'You have successfully logged out'
]);
} catch (JWTException $exception) {
return response()->json([
'msg' => 'Failed to logout, please try again'
], 500);
}
}
public function refresh()
{
$token = JWTAuth::getToken();
$new_token = JWTAuth::refresh($token);
return response()->json([
'token' => $new_token
]);
}
}
3、配置路由
接下來,我們需要為這些API定義路由,您可以在路由文件中添加下面的代碼來創建路由:
Route::group(['prefix' => 'api'], function () {
Route::post('register', 'Api\ApiController@register');
Route::post('login', 'Api\ApiController@login');
Route::post('logout', 'Api\ApiController@logout');
Route::post('refresh', 'Api\ApiController@refresh');
});
4、測試您的API
在完成上述步驟後,您現在可以測試您的API,通過POST請求向/register、/login、/logout和/refresh這些端點傳遞數據來測試您的API。
五、總結
JWT是一種幫助在Web應用程序中提供安全身份驗證的標準,在Laravel中,使用JWT可以讓我們更加方便地實現身份驗證,同時也可以滿足我們的安全需要。本文介紹了JWT的基本概念、Laravel中與JWT集成的步驟以及如何實現JWT身份驗證,希望能夠對您在使用Laravel開發Web應用程序中提供幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/307519.html