JWT là gì? Thành phần JWT gồm những gì và vì sao cần sử dụng JWT?

Tác giả: Đới Thanh Nga 01-07-2024

Hiện nay, thuật ngữ JWT rất phổ biến và quen thuộc với nhiều vai trò, tuy nhiên không phải ai cũng hiểu JWT là gì. Chính vì vậy, viecday365.com sẽ chia sẻ đến bạn đọc một số thông tin về thuật ngữ này một cách chi tiết và bàn luận về những ưu điểm cũng như hạn chế của nó nhé!

Việc làm lập trình viên

1. JWT là gì?

Đầu tiên, chúng ta cần biết rằng JWT chính là từ viết tắt của cụm từ JSON Web Token, là một chuỗi mã hóa mà nguồn gốc của nó là một chuỗi JSON. Chuỗi thông tin dạng JSOn này bằng một cách mã hóa nào đó để trở thành một chuỗi ký tự không có một trật tự nhất định nào, nó rất lộn xộn và khi nhìn vào rất khó để hiểu.

Chúng ta hãy tìm hiểu về từng từ trong cụm từ JSON Web Token nhé:

- JSON: Đây là từ viết tắt của từ Javascript Object Notation – một kiểu định dạng dữ liệu sử dụng một quy luật nhất định và hầu hết các loại ngôn ngữ lập trình hiện nay đều có thể đọc được. Javascript Object Notation được xem là một tiêu chuẩn mở nhằm trao đổi dữ liệu trên các trang Web.

JWT là gì?

- Token: Nó là chữ ký số hay còn gọi là chữ ký điện tử và được mã hóa thành những con số trên các thiết bị chuyên biệt. Token tạo ra dạng mã OTP – loại mã số chỉ sử dụng được một lần và được tạo ngẫu nhiên cho mỗi giao dịch riêng biệt.

Tóm lại, JWT là một phương tiện  đại diện cho những yêu cầu chuyển giao giữa hai bên Client (máy khách) và Server (máy chủ), tất cả các thông tin trong chuỗi JWT đều được định dạng bằng JSON.

Như vậy, bạn có thể hiểu sơ qua về thuật ngữ JWT là gì qua những khái niệm trên, vậy thì nó bao gồm những thành phần nào?

Xen thêm: [Cập nhật] Mô tả công việc lập trình java - Mức thu nhập “khủng”

2. Thành phần của JWT bao gồm những gì?

Một JWT bao gồm 3 phần đó là: Header, Payload, Signature và được ngăn cách với nhau bởi dấu “.”. Ví dụ như: “header.payload.signature”. Hãy cùng tìm hiểu rõ hơn về từng thành phần này nhé.

Header sẽ chứa kiểu dữ liệu và thuật toán sử dụng dùng để mã hóa ra chuỗi JWT. Trong Header bao gồm hai phần chính đó là:

- Typ (type): Loại Token và được mặc định là JWT

- ALG (algorithm): Thuật toán được sử dụng để mã hóa (thuật toán của chữ ký đang được sử dụng như HMAC, SHA256, RSA)

2.2. Payload 

Đây là thành phần thứ hai của JWT, thành phần này sẽ chứa nội dung thông tin bạn muốn đặt trong chuỗi, những thông tin này có thể mô tả của một thực thể (user), cùng có thể là một số thông tin để bổ sung cho phần header.

Phần Payload được chia ra làm 3 loại thông tin: registered (đã đăng ký), public (công khai) và private (riêng tư)

Thành phần của JWT bao gồm những gì?

Registered: Những thông tin đã được quy định trong IANA JSON Web Token Claims registry, những thông tin này không bắt buộc, tuy nhiên thì tùy vào những ứng dụng bạn thực hiện thì hãy đặt ra những điều kiện bắt buộc đối với những thông tin cần thiết trong những thông tin dưới đây:

- iss (issuer): Tổ chức phát hành token

- sub (subject): Chủ đề token

- aud (audience): Đối tượng sử dụng

- exp (expried time): Thời điểm hết hạn của token

- nbf (not before time): token chưa hợp lệ tại thời điểm này

- iat (issued at): Thời điểm phát hành token

- jti: Chính là id của JWT

Public: thông tin này được định nghĩa tùy theo ý muốn của người sử dụng JWT, và để tránh việc trùng lặp xảy ra thì chúng nên được quy định trong IANA JSON Web Token Claims registry hoặc 1 url không bị trùng lặp.

Private: Đây là phần thông tin thêm, nó được dùng để truyền qua lại giữa các Client (máy khách)

Xem thêm: Lập trình viên cần học những gì? Xây dựng nền tảng cho tương lai

2.3. Signature

Phần chữ ký  này được tạo ra bằng cách mã hóa phần Header và phần Payload kèm theo đó là một chuỗi secrect (khóa bí mật).

Cuối cùng, khi kết hợp 3 thành phần trên lại ta sẽ có được một chuỗi JWT hoàn chỉnh nhất. Trên đây chính là 3 thành phần chính để tạo nên một chuỗi JWT.

3. Tại sao cần sử dụng đến JWT?

Dưới đây là một số tình huống cần phải sử dụng đến JWT:

3.1. Authorization (bảo mật)

JWT được sử dụng một cách vô cùng phổ biến khi cần thực hiện bảo mật một thông tin nào đó. Khi người dùng thực hiện đăng nhập và hệ thống thì những yêu cầu tiếp theo của người dùng sẽ chứa thêm mã JWT. Việc chứa thêm mã JWT giúp người dùng có thể truy cập vào được những url, resource và server mà mã cho phép truy cập bởi những thứ đó để cần sử dụng đến JWT để xác nhận quyền truy cập.

Nếu JWT của bạn bị đánh cắp thì kẻ đánh cắp đó hoàn toàn có thể tiếp tục sử dụng JWT đó. Chính vì vậy JWT luôn có thời hạn sử dụng và thời gian này thường rất ngắn và sau thời gian đó thì mã này sẽ không còn giá trị sử dụng nữa. Tuy nhiên, bạn nên cẩn thận và đảm bảo rằng mã JWT của bạn sẽ không bị lộ ra bên ngoài.

Authorization (bảo mật)

Đây cũng chính là lý do tại sao không thực hiện lưu trữ JWT trên Client (máy khách) vì làm như vậy thì ứng úng của bạn sẽ bị tấn công bởi các biểu mẫu hoặc các tệp có hại. Do vậy , bạn không nên lưu trữ những thông tin quan trọng hoặc nhạy cảm ở trong JWT và nên thực hiên các bước để đảm bảo việc làm bảo mật JWT là tuyệt đối.

Tính năng Single Sign On hay còn gọi là tính năng đăng nhập 1 lần của JWT được sử dụng phổ biến bởi chi phí cho nó khá thấp và khả năng sử dụng nó nhiều lần trên các phạm vi khác nhau.

Xem thêm: Bật mí bản mô tả công việc lập trình Python chính xác và đầy đủ

3.2. Information Exchange (trao đổi, tuyền đạt thông tin) 

JWT được xem là một phương thức khá hay để có thể trao đổi thông tin một cách an toàn giữa các thành viên với nhau nhờ vào phần signature (chữ ký) của nó.

Information Exchange (trao đổi, tuyền đạt thông tin) 

Thông qua phần chữ ký đó phía người nhận được thông tin có thể biết được người gửi thông tin đó là ai. Và phần chữ ký này được tạo ra bởi phần cả phần Header và phần Payload nên có thể đảm bảo về tính chính xác và nếu bị giả mạo sẽ phát hiện ra lập tức.

Ở phần trên, chúng ta đã tìm hiểu những thông tin về JWT như: JWT là gì, thành phần của JWT và lý do nên sử dụng JWT, vậy những lợi ích mà nó mang lại là gì?

cv xin việc

4. Những lợi ích mà JWT mang lại khi sử dụng

So sánh với các loại mã khác như SWT  và SAML thì JWT có những ưu điểm hơn và mang lại một số lợi ích như sau:

4.1. Nhỏ gọn hơn rất nhiều

Có thể thấy JSON ngắn gọn hơn XML, vì vậy khi nó được mã hóa thì sẽ được mã JWT nhỏ hơn mã thông báo SAML. Chính điều này đã giúp cho JWT trở thành một sự lựa chọn đầu tiên khi chuyển đổi trong môi trường HTML và HTTP.

4.2. Sử dụng an toàn hơn

JWT có thể sử dụng cặp khóa public (công khai)/ private (riêng tư) dưới dạng chứng chỉ X.509 để thực hiện ký và nó cũng có thể được ký một cách bí mật và sử dụng thuật toán HMAC để chia sẻ.

An toàn hơn khi sử dụng

Mã SAML cùng có thể sử dụng cặp khóa này giống như JWT, tuy nhiên việc ký XML sẽ tạo ra lỗ hổng bảo mật, khiến thông tin có thể bị đánh cắp.

4.3. Phổ biến hơn

Sử dụng bộ phân tích cú pháp JSON rất phổ biến trong hầu hết ngôn ngữ lập trình vì chúng sẽ tạo bản đồ trực tiếp đến các đối tượng. Còn XML không có khả năng tạo bản đồ từ tài liệu sang những đối tượng tự nhiên.

Sử dụng phổ biến hơn

Chính điều này đã kiến JWT được lựa chọn bởi khi làm việc sẽ dễ dàng hơn.

4.4. Dễ xử lý hơn

JWT được sử dụng trên nền tảng internet, vì vậy nó sẽ được xử lý dễ dàng hơn trên tất cả các thiết bị của người dùng và chỉ cần kết nối internet, đặc biệt là những thiết bị di động.

Trên đây là những thông tin sơ lược nhất về JWT là gì và một số thông tin liên quan đến loại dữ liệu này mà bạn cần tìm hiểu. Hy vọng những chia sẻ trên có thể giúp bạn có thêm kiến thức về lĩnh vực này.