Xác thực bằng JSON Web Token (JWT) trong Laravel
Hướng dẫn từng bước triển khai xác thực API bằng JSON Web Token (JWT) trong Laravel. Bài viết sẽ bao gồm các bước cài đặt và cấu hình để bảo mật ứng dụng web thông qua token-based authentication.
Trong bài viết này, chúng ta sẽ triển khai xác thực bằng JSON Web Token (JWT) cho API trong Laravel. JWT là một phương thức bảo mật bằng token, cho phép ứng dụng xác thực người dùng mà không cần phải lưu thông tin đăng nhập trong phiên server, điều này rất hữu ích trong các ứng dụng web hiện đại.
Mã PHP (Laravel)
- Cài đặt package JWT:
Đầu tiên, cài đặt gói JWT bằng Composer:
composer require tymon/jwt-auth
- Đăng ký package:
Sau khi cài đặt xong, bạn cần đăng ký service provider trong file config/app.php
:
'providers' => [
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
- Xuất file cấu hình:
Sử dụng lệnh sau để xuất file cấu hình của JWT:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
- Tạo khóa bí mật:
Bạn sẽ cần một khóa bí mật để mã hóa các token. Tạo khóa bí mật bằng lệnh:
php artisan jwt:secret
- Cập nhật cấu hình auth:
Trong file config/auth.php
, cập nhật guard mặc định cho API:
'guards' => [
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
- Tạo API login:
Thêm phương thức đăng nhập trong AuthController
để phát hành token:
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
return $this->respondWithToken($token);
}
- Phương thức trả về token:
Thêm phương thức trả về token JWT:
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
]);
}
Giải thích chi tiết từng dòng code:
composer require tymon/jwt-auth
: Lệnh này cài đặt gói JWT cho Laravel.Tymon\JWTAuth\Providers\LaravelServiceProvider::class
: Đăng ký nhà cung cấp JWT trong Laravel.php artisan jwt:secret
: Tạo khóa bí mật để mã hóa token.'api' => ['driver' => 'jwt', 'provider' => 'users']
: Cấu hình bảo vệguard
API để sử dụng JWT.auth()->attempt($credentials)
: Phương thức xác thực người dùng và phát hành token nếu thành công.respondWithToken($token)
: Phương thức trả về token JWT cho client.
Yêu cầu hệ thống:
- Laravel 8.x hoặc mới hơn.
- PHP 7.4 hoặc mới hơn.
- Gói JWT
tymon/jwt-auth
.
Cách cài đặt các thư viện:
- Sử dụng Composer để cài đặt gói JWT:
composer require tymon/jwt-auth
- Chạy lệnh
php artisan jwt:secret
để tạo khóa bí mật.
Lời khuyên:
- Luôn bảo vệ token JWT bằng HTTPS để tránh bị đánh cắp token.
- Token nên được mã hóa và có thời gian hết hạn để giảm thiểu rủi ro bảo mật.
- Sử dụng middleware để bảo vệ các route yêu cầu xác thực người dùng bằng JWT.