![translation](https://cdn.durumis.com/common/trans.png)
Đây là bài viết được dịch bởi AI.
JWT (JSON Web Token) là gì?
- Ngôn ngữ viết: Tiếng Hàn Quốc
- •
-
Quốc gia cơ sở: Tất cả các quốc gia
- •
- CNTT
Chọn ngôn ngữ
Văn bản được tóm tắt bởi AI durumis
- JSON Web Token (JWT) là một token được mã hóa để truyền tải thông tin một cách an toàn.
- JWT được cấu tạo bởi tiêu đề, tải trọng và chữ ký, chữ ký đảm bảo tính toàn vẹn của dữ liệu.
- JWT không cần quản lý thông tin trạng thái riêng biệt, do đó có khả năng mở rộng cao trong môi trường phân tán.
JWT là gì?
JSON Web Token (JWT) là một loại phương thức để truyền tải thông tin một cách an toàn dưới dạng đối tượng JSON, đây là một tiêu chuẩn mở (RFC 7519). Nó đơn giản là đóng gói thông tin cần thiết vào token và mã hóa nó để sử dụng.
JWT được nhấn mạnh là một token đã được ký (signed token). Khi sử dụng cặp khóa công khai/khóa riêng tư để ký, chữ ký này đảm bảo rằng chỉ những bên sở hữu khóa riêng tư mới có thể ký token đó. Điều đó có nghĩa là, server sở hữu khóa có thể biết liệu token này có hợp lệ hay không.
Cấu trúc JWT
JWT bao gồm phần Header (tiêu đề), Payload (trọng tải) và Signature (chữ ký).
Mỗi phần được mã hóa Base64 và được phân cách bởi dấu chấm (.).
Header
{
"alg": "HS256",
"typ": "JWT"
Header chứa hai thông tin chính: loại token (typ) và thuật toán ký được sử dụng (alg). Thuật toán ký được sử dụng để tạo và xác minh chữ ký.
typ được đặt là "JWT" và alg là HMAC, SHA256, v.v. Ví dụ trên có nghĩa là thuật toán HS256 được sử dụng với khóa riêng tư.
Payload
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
Payload chứa các Claim (yêu cầu) mà bạn muốn truyền tải trong token. Thông tin nhận dạng người dùng hoặc thuộc tính của token được lưu trữ dưới dạng key-value. Nói cách khác, bạn có thể thêm bất cứ thứ gì bạn muốn!
Theo tiêu chuẩn, tên khóa được xác định ngắn gọn bằng 3 chữ cái.
Các claim được đăng ký như sau:
- iss (Issuer): Người phát hành token (chứa thông tin nhận dạng duy nhất của người phát hành token)
- sub (Subject): Chủ thể mà token nhắm đến
- aud (Audience): Người nhận token
- exp (Expiration Time): Thời gian hết hạn của token (sau thời gian này, token không còn hợp lệ nữa)
- nbf (Not Before): Ngày token có hiệu lực (token không thể được sử dụng trước thời gian này)
- iat (Issued At): Thời gian phát hành token
- jti (JWT Id): Mã định danh của token JWT (giá trị để phân biệt các issuer khác nhau khi có nhiều issuer)
Nếu có bất kỳ giá trị nào khác cần thiết, bạn có thể thêm vào và sử dụng.
Tuy nhiên, payload không phải là giá trị đã được mã hóa và ký, vì vậy nó không chứa thông tin nhạy cảm.
Bất kỳ ai cũng có thể xem nó khi giải mã.jwt.io Bạn có thể kiểm tra trực tiếp trên trang web.
Signature
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
Header và Payload được kết nối bởi dấu chấm (.) sau khi mã hóa base64 và được ký bằng your-256-bit-secret, là khóa riêng tư mà server sở hữu.
Do đó, chỉ server đã phát hành token mới có thể giải mã chữ ký (Signature) bằng khóa riêng tư.
Để giải mã, bạn cần giải mã chữ ký (Signature) bằng khóa riêng tư, sau đó kiểm tra xem base64UrlEncode(header) có khớp với giá trị heaer của JWT hay không và base64UrlEncode(payload) có khớp với giá trị payload hay không.
Header và Payload (ngoại trừ chữ ký) chỉ được mã hóa, vì vậy bạn có thể xem thông tin trong nội dung, nhưng chữ ký đảm bảo tính toàn vẹn và bảo mật của thông tin.
JWT là Self-contained, có nghĩa là nó tự chứa tất cả thông tin cần thiết, và JWT được tạo ra để khắc phục nhược điểm của phiên (session) cần phải có trạng thái (stateful), vì vậy nó không yêu cầu kho lưu trữ riêng biệt.
Không cần phải duy trì phiên (session) ở phía server, vì vậy nó không có trạng thái (stateless), điều này tăng khả năng mở rộng trong các hệ thống phân tán hoặc kiến trúc microservice.
Nó được bảo vệ bằng chữ ký kỹ thuật số (Signature) và đảm bảo tính toàn vẹn của dữ liệu.