Cách kiểm tra nội dung JWT | Cơ chế phát hiện thay đổi
Nội dung của JWT bất kỳ ai cũng có thể giải mã (không phải là mật mã hóa). Tuy nhiên, nhờ có chữ ký nên không thể thay đổi nội dung một cách trái phép.
Cấu trúc của JWT
JWT là một chuỗi văn bản gồm 3 phần: Header.Payload.Signature được nối với nhau bằng dấu chấm (.).
- Header — Thông tin thuật toán (như HS256)
- Payload — Dữ liệu thực tế như ID người dùng, thời gian hết hạn, v.v.
- Signature — Chữ ký để phát hiện thay đổi nội dung
Phần Header và Payload chỉ được mã hóa Base64Url, nên sau khi giải mã là có thể đọc được nội dung.
| Mật mã hóa (Encryption) | Mã hóa (Encoding) |
|---|---|
| Không thể đưa về dạng gốc nếu không có khóa | Bất kỳ ai cũng có thể đưa về dạng gốc |
| Mục đích: Giấu nội dung | Mục đích: Chuyển đổi định dạng dữ liệu |
Việc đưa mật khẩu hoặc số thẻ tín dụng vào JWT là tuyệt đối không được. Chỉ nên bao gồm các thông tin không quá nhạy cảm nếu bị lộ như ID người dùng hoặc thời gian hết hạn.
Giải mã để kiểm tra nội dung
Ví dụ, với một JWT như sau:
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0IiwibmFtZSI6IlRhcm8ifQ.xxxxx
Khi giải mã Base64 phần thứ hai (Payload), chúng ta sẽ nhận được:
{
"sub": "1234",
"name": "Taro"
}
Trong việc gỡ lỗi (debug) các vấn đề như “không thể xác thực” hoặc “quyền hạn không được cập nhật”, bước đầu tiên là kiểm tra nội dung của Payload.
Cơ chế phát hiện thay đổi
“Điều gì xảy ra nếu tôi sửa đổi Payload?” — Máy chủ sẽ từ chối bằng chữ ký.
Khi phát hành JWT, máy chủ sử dụng khóa bí mật để tính toán chữ ký từ Header và Payload. Nếu Payload bị thay đổi dù chỉ một ký tự, kết quả tính toán sẽ khác đi, dẫn đến không khớp với chữ ký được gửi kèm.
Kết quả: Trả về lỗi 401 Unauthorized.
🔍 この場でJWTをデコードして中身を確認する
※ 入力・貼り付け時に自動でデコードされます