DEV Community

meotism
meotism

Posted on • Updated on

Json Web Token

Để phục vụ mục đích xác thực người dùng và bảo mật để trao đổi thông tin qua nhiều ứng dụng. JWT(json web token) ra đời. Sau đây là một số thông tin về JWT.
JWT structure: có 3 phần: Header, Payload, Signature.

  1. Header: chứa loại token và thuật toán mã hóa nào
  2. Payload: chứa các claim. Claims là các biểu thức về các đối tượng(thường là người dùng) và các dữ liệu liên quan. Có 3 loại claims: registered, public, private claims.
  3. Registered claim: cung cấp các thông tin: iss (issuer), exp (expiration time), sub (subject), aud (audience),... Claim này không bắt buộc nhưng được khuyên dùng.
  4. Public claim: Có thể được định nghĩa bởi người dùng.(Nhưng tránh trùng nhau giữa các claim sẽ được thông qua URI nơi chứa các namespace tránh trùng)
  5. Private claim: Được định nghĩa bởi người dùng, dùng để chia sẻ thông tin giữa 2 partner.
  6. Signature: Là một chuỗi mã hóa được tạo bởi header, payload và sceret key. Do signature bao gồm cả header và payload nên có thể dùng để kiểm tra dữ liệu có toàn vẹn khi truyền tải.

Workflow JWT:
Image description

Sự khác biệt giữa cookies và JWT:
Image description
Cookies:

  • Chứa session id.
  • Với mỗi request đều tra cứu dữ liệu database.
  • Tất cả xử lý đều nằm trên cùng 1 máy chủ.
  • Mở rộng qui mô khó khăn.

JWT:

  • Chứa signature xác nhận thông tin người dùng.
  • Không yêu cầu tra cứu dữ liệu database.
  • Được lưu trữ tại client. Nên việc xử lý có thể trên nhiều máy chủ khác nhau.
  • Mở rộng qui mô dễ dàng.

Cách server xác thực token:
Image description
Khi server generate JWT sẽ tạo ra signature. Phần header và payload trong JWT được mã hóa dạng base64. Signature được tính toán bằng cách sử dụng một hàm hash chuỗi header và payload đã được mã hóa cùng với secret key(nhiều server thì đều phải chung 1 secret key). JWT sẽ bao gồm header, payload đã được mã hóa + chuỗi signature. Sau đó sẽ gửi đến Client.
Khi Client sử dụng dịch vụ sẽ gửi JWT về server. Sau đó server sẽ tách header và payload đã mã hóa của JWT, lấy + với secret key của server và hash tạo HMAC. Nếu HMAC giống với của signature của JWT gửi đến, server sẽ xác nhận verify thành công.

Image description

Tài liệu tham khảo:

Top comments (0)