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)

  1. Cài đặt package JWT:

Đầu tiên, cài đặt gói JWT bằng Composer:

composer require tymon/jwt-auth
  1. Đă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,
],
  1. 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"
  1. 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
  1. 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',
    ],
],
  1. 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);
}
  1. 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:

  1. composer require tymon/jwt-auth: Lệnh này cài đặt gói JWT cho Laravel.
  2. Tymon\JWTAuth\Providers\LaravelServiceProvider::class: Đăng ký nhà cung cấp JWT trong Laravel.
  3. php artisan jwt:secret: Tạo khóa bí mật để mã hóa token.
  4. 'api' => ['driver' => 'jwt', 'provider' => 'users']: Cấu hình bảo vệ guard API để sử dụng JWT.
  5. 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.
  6. 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.


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Các cách SELECT dữ liệu từ database MySQL trong Laravel

Khám phá các phương pháp khác nhau để select dữ liệu từ database MySQL trong Laravel, bao gồm sử dụng Eloquent ORM và Query Builder.
Đọc nội dung Excel bằng Laravel

Hướng dẫn chi tiết cách đọc nội dung file Excel trong Laravel bằng gói Laravel Excel. Bài viết cung cấp đoạn mã mẫu, giải thích chi tiết từng bước và hướng dẫn cài đặt gói cần thiết.
Tất cả cách UPDATE dữ liệu từ database MySQL trong Laravel

Hướng dẫn chi tiết cách cập nhật dữ liệu trong database MySQL sử dụng Laravel, bao gồm cách sử dụng Eloquent ORM và Query Builder.
Cách sử dụng hàm where trong Laravel

Hướng dẫn chi tiết các cách sử dụng hàm `where` trong Laravel để thực hiện các truy vấn cơ sở dữ liệu hiệu quả và linh hoạt.
Cách POST dữ liệu tới API trong Laravel

Hướng dẫn cách sử dụng Laravel để gửi yêu cầu POST dữ liệu tới API bên ngoài hoặc API nội bộ. Sử dụng phương thức HTTP Client tích hợp trong Laravel để gửi dữ liệu một cách dễ dàng và bảo mật.
Các cách DELETE dữ liệu từ database MySQL trong Laravel

Hướng dẫn chi tiết về các phương pháp khác nhau để xóa dữ liệu từ database MySQL trong Laravel, bao gồm Eloquent, Query Builder, và cách thực hiện soft delete.
Cách chuyển đổi chuỗi Markdown sang HTML bằng Laravel

Hướng dẫn cách chuyển đổi chuỗi Markdown sang HTML trong Laravel bằng cách sử dụng thư viện `league/commonmark`, giúp quá trình chuyển đổi trở nên dễ dàng và hiệu quả.
Các cách INSERT dữ liệu vào database MySQL trong Laravel

Khám phá các phương pháp khác nhau để insert dữ liệu vào database MySQL trong Laravel, bao gồm sử dụng Eloquent ORM và Query Builder.
Hướng dẫn làm đăng nhập bằng Facebook trong Laravel

Hướng dẫn từng bước cách tích hợp chức năng đăng nhập bằng tài khoản Facebook vào ứng dụng Laravel, sử dụng thư viện Socialite. Bài viết bao gồm cách cấu hình Facebook OAuth và cách xử lý đăng nhập trong Laravel.
Hướng dẫn làm chức năng đăng nhập bằng Apple ID trong Laravel

Bài viết hướng dẫn chi tiết cách tích hợp chức năng đăng nhập bằng Apple ID vào Laravel, sử dụng OAuth2. Bạn sẽ học cách cấu hình ứng dụng để kết nối với dịch vụ Apple và xử lý thông tin đăng nhập của người dùng.

Đã thêm vào giỏ hàng