Xác thực JSON Web Token (JWT) trong PHP
Bài viết hướng dẫn cách sử dụng JSON Web Token (JWT) để xác thực trong PHP. Sử dụng JWT giúp bảo mật thông tin giữa client và server một cách hiệu quả và dễ dàng triển khai trong các ứng dụng web.
Trong bài viết này, chúng ta sẽ khám phá cách sử dụng JWT để xác thực người dùng trong ứng dụng PHP. JWT là một chuẩn mở, giúp truyền tải dữ liệu an toàn giữa client và server thông qua các token mã hóa, dễ dàng kiểm tra và xác nhận tính xác thực của người dùng.
Mã PHP:
<?php
// Thư viện JWT cần thiết, có thể cài đặt qua Composer
require 'vendor/autoload.php';
use \Firebase\JWT\JWT;
// Khóa bí mật để mã hóa JWT
$secretKey = 'your-secret-key';
// Dữ liệu người dùng, được mã hóa thành token
$data = [
'id' => 123,
'email' => '[email protected]',
'exp' => time() + 3600 // Hết hạn sau 1 giờ
];
// Mã hóa token
$jwt = JWT::encode($data, $secretKey);
// Xuất token
echo "JWT Token: " . $jwt . "\n";
// Giải mã token
try {
$decoded = JWT::decode($jwt, $secretKey, ['HS256']);
echo "Decoded Data:\n";
print_r($decoded);
} catch (Exception $e) {
echo "Token không hợp lệ: " . $e->getMessage();
}
?>
Giải thích chi tiết từng dòng code:
require 'vendor/autoload.php';
: Nạp các thư viện cần thiết từ Composer, bao gồm thư viện Firebase JWT.use \Firebase\JWT\JWT;
: Sử dụng lớp JWT để mã hóa và giải mã token.$secretKey
: Đây là khóa bí mật được dùng để mã hóa và giải mã JWT. Khóa này cần được bảo mật tuyệt đối.$data
: Dữ liệu người dùng được mã hóa thành JWT. Ở đây có chứa thông tinid
,email
vàexp
(thời gian hết hạn).JWT::encode($data, $secretKey)
: Mã hóa mảng dữ liệu thành JWT token bằng khóa bí mật.JWT::decode($jwt, $secretKey, ['HS256'])
: Giải mã JWT bằng khóa bí mật và kiểm tra xem token có hợp lệ không.catch (Exception $e)
: Bắt các lỗi xảy ra nếu token không hợp lệ hoặc không giải mã được.
Yêu cầu hệ thống:
- PHP >= 7.2
- Composer
- Thư viện Firebase JWT (
firebase/php-jwt
)
Cách cài đặt các thư viện để chạy được đoạn mã PHP trên:
- Cài Composer: https://getcomposer.org/download/
- Chạy lệnh sau để cài thư viện JWT:
composer require firebase/php-jwt
Lời khuyên:
- Không nên lưu khóa bí mật trên cùng hệ thống với mã nguồn để tăng cường bảo mật.
- Cần cấu hình thời gian hết hạn hợp lý cho JWT để tránh các vấn đề bảo mật tiềm ẩn.