Authentication bằng Token - Bài 2: Giới thiệu JWT

Trước khi đọc bài này, các bạn hãy đọc bài Ví dụ thực tế để hiểu rõ hơn cách authentication bằng token, để hiểu được cơ chế authentication bằng token, tiếng Việt mình có thể dịch ra là Xác thực tài khoản bằng một string đặc biệt (token là một dạng string được tạo ra theo một cơ chế đặc biệt bí hiểm)

JWT là gì

TOKEN = một dạng string được tạo ra theo một cơ chế

JWT chính là tên 1 cơ chế để tạo ra token (tức, có nhiều cơ chế khác nữa không chỉ riêng JWT)

JWT viết tắt của JSON Web Token

Cái cơ chế JWT này, nó đã nhét cái gì vào trong string, mời bạn đọc tiếp là rõ

Cơ chế của JWT

Một request sử dụng JWT sẽ gửi kèm trong header

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o

Không cần quan tâm cái Bearer, nó là quy định thôi, cái cần quan tâm là đoạn hầm bà lằng phía sau nó

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.XbPfbIHMI6arZ3Y922BhjWgQzWXcXNrz0ogtVhfEd2o

Dòm kỹ một tí bạn sẽ thấy nó có 2 dấu ., tách cái string này ra làm 3 phần header.payload.signature

  • Header: chứa kiểu dữ liệu, thuật toán mã hóa chữ ký
  • Payload: một số thông tin như thời gian expire, thông tin user,... tùy thuộc server muốn đưa về cái gì.
  • Signature: chữ ký điện tử, chứa thông tin để server có thể verify cái JWT này

Chữ ký sẽ được tạo ra ở server, có thể là như thế này (có nhiều cách khác)

var signature = RS256Algorithm(encode64(header) + "." + encode64(payload) , secret);

// secret là một chìa khóa (như password ấy mà) chỉ có server mới biết

Còn cái JWT sẽ được cấp bằng thuật toán cao siêu nhất vũ trụ nối chuỗi

var jwt = encode64(header) + "." + encode64(payload) + "." + signature;

Authentication bằng Token - Bài 2: Giới thiệu JWT

Đọc tiếp