Trang chủ Tìm hiểu về JWT

Tìm hiểu về JWT

  • 2024 Feb 28
  • 2 minutes read

JWT là gì? JWT Token Authentication có ưu điểm gì nổi trội hơn so với Session Base Authentication.

Không giống như session-bases authentication là stateful (lưu trữ request ở máy chủ). Cơ chế JWT là stateless, tức là mỗi request là độc lập, dữ liệu gọi tới server ko được lưu lại mà thông tin dữ liệu sẽ được chứa trong payload gửi kèm trong mỗi header của request (header: Authorization: ‘Bearer [token]’)

Ưu điểm: vd hệ thống có nhiều hơn 1 máy chủ, nếu dùng cách cũ thì session lưu trên chính máy chủ đó, phải có thêm cơ chế sync session data giữa các máy chủ trở nên phức tạp, JWT thì ko lưu vào máy chủ nên sẽ đơn giản hơn, server chỉ cần có secret key là có thể giải mã JWT token, ngoài ra JWT ko lo đụng chính sách CORS của trình duyệt, bảo mật hơn do cần có secret key, tuỳ biến cao, thêm data bằng cách thêm vào payload

Flow:

User sign in → server tạo JWT token → trả về client (có thể lưu ở cookie hoặc localStorage)

  • Nếu lưu ở cookies thì ko cần tạo middleware và add header authorization bear Token vì mỗi request gửi đi đã đính kèm cookie token.
  • Nếu lưu ở localStorage thì nên tạo middleware và trong mỗi request tiếp theo sẽ đính kèm token vào header authorization.

Cơ chế là ở những request tiếp theo, phía server sẽ lấy encodeHeader và encodePayload ra, sau đó dựa vào secret key ở server để tạo ra chữ ký signature, rồi sau đó lấy signature mới tạo ra này so sánh với chữ ký gửi từ request client, nếu đúng thì giữ phiên đăng nhập. Nếu hacker detect JWT và cố tính change payload, vd change sub user_id thì do payload change, sẽ làm signature cũng sẽ change và so sánh với signature ban đầu trả về ở client, ko match nhau nên request sẽ failed, ko giữ phiên đăng nhập.


1 Comments

Anonymous

2024-05-04 at 12:25AM

Awesome Test!