Những vai trò và thành phần chính của JWT

hovanban

Well-known member
Rất nhiều bạn sẽ thắc mắc rằng vậy JWT có phải viết tắc từ một tổ hợp từ gì không hay đây là chính là tên gọi của thuật ngữ này. Trên thực tế, thuật ngữ JWT được viết tắt từ cụm từ JSON Web Token. Đây là một chuẩn mở (RFC 7519) có thể giúp bạn tạo ra một cái chuỗi mã hóa chứa các dữ liệu để bạn trao đổi thông tin giữa các hệ thống khác nhau một cách an toàn và đáng tin cậy. Các chuỗi thông tin thì sẽ được mã hóa một cách ngẫu nhiên, tùy hứng và không theo một trật tự sắp xếp nào. Do đó, đây sẽ là một thử thách khó khăn đối với các hacker khi họ muốn trà trộn lấy cắp thông tin dữ liệu mật của bạn.

Để có thể hiểu sâu hơn về thuật ngữ JWT,hãy cùng tìm hiểu ý nghĩa của những thành phần trong thuật ngữ JWT:
  • Đầu tiên chính là JSON. JSON được viết tắt của từ Javascript Object Notation, đây là một dạng dữ liệu được sử dụng theo quy luật nhất định, hầu hết những ngôn ngữ lập trình thời điểm này đều có thể đọc và tìm hiểu được vô cùng dễ dàng. Đối với Javascript Object Notation, chúng được coi là một tiêu chuẩn mở và được sử dụng với mục đích trao đổi dữ liệu ở trong các trang web.
  • Tiếp theo là Token. Đây là chữ ký số hay nói cách khác là chữ ký điện tử, chúng được mã hóa thành những con số khác nhau để tạo thành một dãy số ấn tượng. Token được tạo ra dưới dạng OTP, và đây là một loại mã số chỉ sử dụng một lần cho nên nó tạo ra những sự ngẫu nhiên thú vị cho mỗi lần giao dịch khác nhau.
Tóm lại, JWT chính là một phương tiện được đại diện cho những yêu cầu cần thiết để chuyển giao liên tục giữa Client (máy khách) và Server (máy chủ), từ đó xâu chuỗi những mã JWT lại để định dạng bằng JSON.

Những thành phần chính của JWT

JSON WEB TOKEN (JWT) gồm 3 thành phần: Header, Payload, Signature. Những thành phần này được ngăn cách với nhau rất rõ ràng bởi ký tự “.”. Do đó, chúng ta có thể hình dung ra cấu trúc của nó sẽ theo format sau: “header.payload.signature”.

Header
Header chứa kiểu dữ liệu và các thuật toán được sử dụng nhanh chóng để mã hóa ra chuỗi JWT một cách hoàn hảo. Ngoài ra, Header sẽ bao gồm 2 phần chính, đó là:

  • Typ (Type): Là loại token và được mặc định là một JWT.
  • ALG (Algorithm): Được xem là thuật toán mới, sử dụng để mã hóa nhanh chóng (thuật toán chữ ký được sử dụng phổ biến như HMAC, SHA256, RSA)
Ví dụ:

{
"ALG": "HS256",
"TYP": "JWT"
}

Có thể thấy thành phần của Header trong ví dụ trên gồm:
  • TYP: chỉ ra rằng đối tượng ở đây là một JWT
  • ALG: chỉ ra rằng thuật toán dùng để mã hóa cho chuỗi đang được sử dụng ở đây là HS256
Và chúng ta có đầu ra sẽ là:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload
Phần tiếp theo của Token chính là Payload. Nó đóng một vai trò rất quan trọng trong JWT, đây là nơi chứa các nội dung của thông tin (claim) mà người sử dụng muốn truyền đi ở bên trong chuỗi.Các thông tin này góp phần mô tả thực thể một cách đơn giản và nhanh chóng hoặc cũng có thể là các thông tin bổ sung thêm cho phần Header.

Claims là một biểu thức về một thực thể chẳng hạn như người dùng (user) và một số metadata phụ trợ khác. Nhìn chung thì Claim được chia làm 3 loại là: reserved, public và private.
  • Reserved: đây là những thông tin đã được quy định trong IANA JSON Web Token Claims registry. Tuy nhiên, những thông tin này không mang tính bắt buộc. Bạn có thể tùy vào từng ứng dụng khác nhau mà bạn có thể để đặt ra những điều kiện ràng buộc đối với những thông tin cần thiết nhất. Ví dụ như:
  • iss (issuer): tổ chức phát hành của Token
  • sub (subject): chủ đề Token
  • aud (audience): đối tượng sử dụng Token
  • exp (expired time): thời điểm token sẽ hết hạn
  • nbf (not before time): token chưa hợp lệ trước thời điểm này
  • iat (issued at): thời điểm token sẽ được phát hành, tính theo UNIX time
  • jti: ID của JWT
  • Public: Được định nghĩa tùy theo ý muốn của người sử dụng JWT. Tuy nhiên để tránh tình trạng trùng lặp xảy ra thì nên được quy định ở trong IANA JSON Web Token Registry hoặc là 1 URL có chứa không gian tên không bị trùng lặp.
  • Private: Đây là phần thông tin thêm được dùng để truyền tải qua lại giữa các máy khách với nhau. Ví dụ:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Phần Payload có ví dụ như sau:

{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239021
}
Và đầu ra của chúng ta sẽ là:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIxfQ

Signature
Signature là phần chữ ký bí mật, được tạo ra bởi mã hóa phần Header cùng với phần Payload kèm theo đó là một chuỗi secret (khóa bí mật). Khi ta kết hợp 3 phần đó lại với nhau, ta sẽ có một chuỗi JWT hoàn chỉnh nhất, đảm bảo có thể trợ giúp hiệu quả cao cho công việc của mỗi người lập trình viên.

Khi tích hợp ví dụ của phần Header và Payload, Signature có được như sau:

qbz9tqyI-O1J2UX5ZX6RXE3Z6LVLoRp9ub3-U-2R8P8

Vì sao cần dùng JWT?
Trên thực tế, có rất nhiều lý do để thuyết phục người dùng sử dụng JWT. Sau này là một vài lý do nổi bật nhất và được nhiều người dùng bị thuyết phục.

Bảo mật
Đầu tiên ta phải nói đến đó chính là tính bảo mật của JWT. Trong thời đại công nghệ số hiện đại số ngày nay, việc bảo mật là việc được mọi người dùng ưu tiên hàng đầu. Để tránh việc bị hack thông tin từ những người ẩn danh, hacker hay thậm chí là đối thủ cạnh tranh thì người dùng yêu cầu rất cao ở tính bảo mật. Có thể thấy khi người dùng thực hiện đăng nhập vào hệ thống cần những yêu cầu tiếp theo phải chứa thêm mã JWT. Không chỉ vậy, việc này sẽ giúp cho họ thuận tiện trong việc click vào những server, resource và url một cách khá là dễ dàng bởi họ chỉ cần sử dụng duy nhất một JWT là đã hoàn thành xác nhận được quyền truy cập một cách nhanh chóng, đạt hiệu quả.

Giả sử trong trường hợp JWT của bạn bị đánh cắp thì lúc này kẻ đánh cắp vẫn có thể hoàn toàn sử dụng JWT của bạn. Vì để tránh những tình huống đó xảy ra JWT luôn luôn có thời hạn sử dụng ở khoảng thời gian ngắn. Sau khi thời gian hết hiệu lực thì mã JWT sẽ không còn giá trị sử dụng. Tuy nhiên bạn vẫn phải sử dụng cẩn thận bảo mật mã JWT của mình một cách an toàn và tránh cho người khác biết đến mã đó của bạn.

Điểm đặc biệt khác của JWT là nhờ có tính năng mới Single Sign On, hay được hiểu là tính năng có thể đăng nhập một lần của JWT được dùng rất hiệu quả và phổ biến, bởi chi phí đưa ra không quá cao và nó cũng có thể sử dụng được rất nhiều lần, trên những phạm vi khác nhau.

Truyền đạt, trao đổi thông tin
Lý do thứ hai mà được nhiều người ưa dùng đó chính là việc truyền đạt trao đổi thông tin nhờ vào JWT với độ an toàn cao bởi các thành viên có thể trao đổi, nhận dạng nhau dễ dàng hơn dựa vào phần chữ ký của nó. Nhờ có tính năng chữ ký này mà người sử dụng có thể nhận biết được người đã gửi thông tin là ai, từ đó có thể đảm bảo tuyệt đối chính xác và an tâm trong việc nhận biết người giả mạo.

Ngoài ra thì JWT còn mang đến cho người dùng rất nhiều lợi ích và chắc rằng bạn sẽ bị ấn tượng và muốn sử dụng để làm công cụ hỗ trợ ngày cho công việc của mình đấy.
  • Sử dụng an toàn, bảo mật cao hơn nhờ vào thuật toán mã hóa HMAC, dễ dàng chia sẻ.
  • Phổ biến bởi bộ phận phân tích cú pháp JSON không hề xa lạ trong các ngôn ngữ lập trình khi chúng tạo ra một bản đồ trực tiếp hướng đến các đối tượng khác nhau.
  • Nhỏ gọn hơn nhiều XML khác, chúng được mã hóa một cách rất thông minh và được đánh giá là sự lựa chọn hoàn hảo trong môi trường làm việc
  • Xử lý nhanh gọn, dễ dàng trong các nền tảng internet, do đó người dùng có thể kết nối bất cứ trên thiết bị nào, kể cả là các thiết bị di động cá nhân.
CÔNG TY TNHH TƯ VẤN TRUYỀN THÔNG MINARA
ĐỊA CHỈ:
- 182 Trần Bình Trọng, P.3, Q.5, Tp.HCM
- 27 Đường số 16, Trung Tâm Hành Chính Dĩ An, Bình Dương.
Điện thoại: 097.777.1060
Email: info@minara.vn
Website: www.minara.vn
 
Chỉnh sửa lần cuối:
Bên trên