JSON Web Token là một phương pháp RFC 7519 tiêu chuẩn mở để trình bày các xác nhận quyền sở hữu một cách an toàn giữa hai bên một cách nhỏ gọn và khép kín. Thông tin này có thể được xác minh và đáng tin cậy vì nó được ký điện tử. JWT có thể được ký bằng cách sử dụng một mã ( với thuật toán HMAC ) hoặc một cặp khóa công khai/riêng tư bằng RSA hoặc ECDSA.
Một ví dụ về JWT Token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo
Vậy thì khi nào chúng ta sử dụng JSON Web Tokens
- Authorization: Đây là tình huống phổ biến nhất sử dụng JWT. Mỗi requets tiếp theo sẽ bao gồm JWT, cho phép người dùng truy cập các routes, services, và dịch vụ tài nguyên được phép với mã thông báo đó. SSO là một tính năng sử dụng rộng rãi JWT ngày nay, vì chi phí nhỏ và khả năng dễ dàng sử dụng trên các miền khác nhau
- Trao đổi thông tin: Mã thông báo web JSON là một cách tốt để truyền thông tin giữa các bên một cách an toàn. Bởi vì JWT có thể được ký — ví dụ: sử dụng cặp khóa công khai / riêng tư — bạn có thể chắc chắn rằng người gửi là những người họ nói. Ngoài ra, vì chữ ký được tính bằng cách sử dụng tiêu đề và trọng tải, bạn cũng có thể xác minh rằng nội dung không bị giả mạo.
Ở dạng nhỏ gọn, JWT bao gồm ba phần được phân tách bằng dấu chấm (.), Đó là:
- Header
- Payload
- Signature
Do đó, một JWT thường trông giống như sau. xxxxx.yyyyyy.zzzzzz
- Header
Header bao gồm 2 phần: loại của token và thuật toán đang được sử dụng
Ví dụ:
{
"alg": "HS256",
"type": "JWT"
}
Sau đó JSON này sẽ được mã hóa thành Base64Url để tạo thành phần đầu tiên của JWT - Payload
Thành phần thứ 2 của token là payload. Xác nhận quyền sở hữu tuyên bố về một thực thể (typically, the user) và dữ liệu bổ sung. Có 3 loại xcas nhận quyền sở hữu: registered, public, và private. - Registered claims: Đây là một tập hợp các xác nhận quyền sở hữu được xác định trước, không bắt buộc nhưng được khuyến nghị, để cung cấp một tập hợp các xác nhận quyền sở hữu. Một trong số đó là: iss(nhà phát hành), exp(thời gian hết hạn), sub(chủ đề), aud(khán giả) và những thứ khác.
- Public claims: Những người sử dụng JWT có thể xcas định những điều này theo ý muốn. Nhưng để tránh xung đột, chúng ta nên được xác định trong IANA JSON Web hoặc được định nghĩa là một URI có chứa namespace chống xung đột.
- Private claims: Đây là những tuyên bố tùy chỉnh được tạo ra để chia sẻ thông tin giữa các bên đồng ý sử dụng chúng và không phải là tuyên bố đã đăng ký hoặc công khai.
Ví dụ:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
} - Signature
Để tạo phần chữ ký bạn phải lấy tiêu đề được mã hóa, mã hóa payload, một mật mã, thuật toán được chỉ định trong header, và ký tên đó.
Ví dụ: nếu bạn muốn sử dụng thuật toán HMAC SHA256, chữ ký sẽ được tạo theo cách sau:
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải.

Chữ ký
noun
chữ ký, dấu ở đầu bản nhạc, tên ký







0 nhận xét:
Đăng nhận xét