Xác thực JSON Web Token (JWT) với C++
Bài viết này sẽ hướng dẫn cách sử dụng JSON Web Token (JWT) trong C++ để xác thực người dùng, bao gồm các bước tạo và xác minh token với các thư viện C++ phổ biến.
Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai cơ chế xác thực bằng JSON Web Token (JWT) trong C++ để bảo vệ các API. JWT cho phép mã hóa thông tin xác thực dưới dạng token, giúp bảo mật và xác minh danh tính người dùng trên các ứng dụng.
Mã C++:
#include <iostream>
#include <jwt-cpp/jwt.h> // Yêu cầu thư viện jwt-cpp
int main() {
// Tạo một JSON Web Token (JWT)
auto token = jwt::create()
.set_issuer("auth0")
.set_type("JWT")
.set_payload_claim("user", jwt::claim(std::string("John Doe")))
.set_expires_at(std::chrono::system_clock::now() + std::chrono::seconds{3600})
.sign(jwt::algorithm::hs256{"secret_key"});
std::cout << "Generated JWT: " << token << std::endl;
// Xác minh JWT
auto decoded = jwt::decode(token);
auto verifier = jwt::verify()
.allow_algorithm(jwt::algorithm::hs256{"secret_key"})
.with_issuer("auth0");
try {
verifier.verify(decoded); // Xác minh token
std::cout << "Token is valid!" << std::endl;
} catch (const std::exception& e) {
std::cerr << "Invalid token: " << e.what() << std::endl;
}
return 0;
}
Giải thích chi tiết từng dòng code:
-
#include <jwt-cpp/jwt.h>
: Bao gồm thư việnjwt-cpp
để làm việc với JWT. -
jwt::create()
: Bắt đầu tạo một token JWT mới. -
set_issuer("auth0")
: Thiết lập nhà phát hành token. -
set_payload_claim("user", ...)
: Thiết lập thông tin người dùng được mã hóa trong token. -
set_expires_at(...)
: Thiết lập thời gian hết hạn cho token. -
sign(jwt::algorithm::hs256{"secret_key"})
: Ký token bằng thuật toán HMAC-SHA256 với khóa bí mật. -
jwt::decode(token)
: Giải mã token để xác minh. -
jwt::verify().allow_algorithm(...)
: Xác minh token với thuật toán và khóa bí mật. -
verifier.verify(decoded)
: Thực hiện xác minh token đã giải mã.
Yêu cầu hệ thống:
- Phiên bản C++: C++11 hoặc mới hơn.
- Thư viện
jwt-cpp
: Cài đặt bằng cách sử dụng trình quản lý gói hoặc thủ công từ GitHub. - Trình biên dịch hỗ trợ C++11 trở lên.
Cách cài đặt thư viện:
- Để cài đặt thư viện
jwt-cpp
, bạn có thể clone từ GitHub:https://github.com/Thalhammer/jwt-cpp
. - Thêm đường dẫn tới thư viện trong tệp CMakeLists.txt nếu sử dụng CMake:
target_link_libraries(your_project jwt-cpp)
Lời khuyên:
- JWT cần được bảo vệ cẩn thận, không nên để lộ khóa bí mật (
secret_key
). - Hãy đảm bảo sử dụng HTTPS khi truyền token để tránh bị lộ thông tin.