Hãy cùng Thế giới JS JSON Web Token (JWT) là một tiêu chuẩn mở để truyền tải thông tin an toàn giữa các bên trong một chuỗi JSON được mã hóa. JWT được sử dụng phổ biến trong các ứng dụng web để xác thực và ủy quyền người dùng.
1.Giới thiệu JSON Web Token (JWT)
• Chúng chứa các đối tượng JSON có thông tin cần chia sẻ giữa máy khách và máy chủ.
• Sau đó, những mã thông báo này được gửi trên mỗi yêu cầu HTTP, cho phép máy chủ xác thực người dùng.
• Mỗi JWT cũng được ký bằng việc sử dụng mã hóa (băm) để đảm bảo rằng nội dung JSON (còn được gọi là JWT claims) không thể bị thay đổi bởi máy khách hoặc một bên độc hại.
2. Ví dụ
Ví dụ, khi bạn đăng nhập bằng tài khoản Google, Google sẽ cung cấp cho bạn một JWT chứa các thông tin / payload JSON sau để xác định chính xác người dùng cuối cùng là ai.
3. Cấu trúc của JWT
Một phần “Chữ ký” (Signature) là kết quả của việc ghép nối phần Header và Payload, sau đó được mã hóa bằng khóa riêng (private key).
Chuỗi JWT ở dạng serialized có định dạng như sau:
4. Ví dụ về API Authentication
5. Cách lưu trữ của JWT
Trên phía máy khách, các token có thể được lưu trữ theo hai cách khác nhau:
• được lưu trữ trong cookie hoặc
• được lưu trữ trong sessionStorage (hoặc localStorage) của trình duyệt.
6. Token lưu trong cookie
Token sẽ được lưu trữ trong sessionStorage hoặc localStorage của trình duyệt. Token sẽ được bao gồm trong mỗi yêu cầu gửi đến máy chủ, ví dụ với một tiêu đề “Authorization: Bearer <token>”.
Nhược điểm của JWT là do token phải được cung cấp cho ứng dụng JavaScript, nó sẽ bị lộ ra nếu có các lỗ hổng XSS và có thể bị đánh cắp.
7. Token lưu trong cookie
Token được lưu trữ trong cookie Khi được lưu trữ trong cookie của trình duyệt, có thể đặt cờ “HttpOnly” (và “Secure”) để được bảo vệ khỏi việc đánh cắp mã thông báo trong trường hợp tấn công XSS.
Nhược điểm
Không thể mong đợi bảo vệ CSRF từ mã thông báo. Thực sự, mã thông báo được tự động gửi với cookie (và do đó là bất kỳ yêu cầu tấn công CSRF nào).
Giải pháp có thể
Lưu mã thông báo truy cập trong bộ nhớ và lưu mã thông báo làm mới trong cookie.
8. Lưu ý khi dùng JWT
- Luôn sử dụng thuật toán mã hóa bảo mật để tạo chữ ký.
- Không bao giờ lưu trữ các thông tin nhạy cảm trong payload của JWT, vì payload có thể được giải mã bởi bất kỳ ai nắm giữ JWT.
- JWT không nên được sử dụng để truyền tải các thông tin nhạy cảm như mật khẩu, mà nên được sử dụng để truyền tải các thông tin định danh và ủy quyền.
Nếu bạn thấy bài này hữu ích hay cho chúng tôi 1 like vs 1 share kiến thức hay tới mọi người, cùng chia sẻ cùng phát triển cộng đồng Javascript VN.
Nếu bạn cảm thấy hữu ích và yêu thích Thế giới JS, hãy tham gia và theo dõi chúng tôi để nhận thêm nhiều kiến thức MIỄN PHÍ hơn nữa nhé:
Share to learn more than!