Trong kỷ nguyên số, bảo mật dữ liệu và xác thực người dùng là mối quan tâm hàng đầu đối với bất kỳ ứng dụng nào. JSON Web Tokens như một giải pháp hữu hiệu để giải quyết những thách thức đó. Mã nguồn mở này không chỉ cung cấp cơ chế xác thực mạnh mẽ mà còn đóng vai trò then chốt trong việc bảo vệ dữ liệu nhạy cảm của ứng dụng khỏi các cuộc tấn công. Cùng Aptech khám phá sâu hơn về cách JWT hoạt động cùng những lợi ích nó mang lại.

JWT là gì?

JSON Web Tokens hay JWT là một tiêu chuẩn mở được sử dụng để truyền thông tin an toàn dưới định dạng JSON giữa client và server. Không phải bất kỳ mã thông báo nào cũng là JWT, mà chỉ những mã thông báo tuân thủ chuẩn mới được gọi là JWT.

JWT là chìa khóa bảo mật cho các ứng dụng web hiện đại JWT là chìa khóa bảo mật cho các ứng dụng web hiện đại

Một trong những điểm nổi bật của JWT là kích thước nhỏ, cho phép chúng được truyền đi nhanh chóng thông qua nhiều kênh khác nhau như URL, tham số POST hoặc tiêu đề HTTP. Điều này góp phần tăng hiệu suất của ứng dụng. Quan trọng hơn nó chứa đủ thông tin cần thiết về một thực thể, do đó người nhận không cần phải liên lạc lại với server để xác thực mã thông báo. giúp giảm tải cho server và tăng tính sẵn sàng của ứng dụng.

Cấu tạo chi tiết của JSON Web Tokens

Để có thể hiểu sâu hơn về JSON Web Tokens, chúng ta cần tìm hiểu cấu trúc và thành phần cấu tạo. Một JWT bao gồm ba phần chính, được phân tách bởi dấu chấm (.), cụ thể là:

  • Header
  • Payload
  • Signature

Một JWT bao gồm ba phần chính, được phân tách bởi dấu chấm (.) là Header – Payload – Signature

Header

Header của JWT thường chứa hai thành phần chính. Thứ nhất là “typ”, chỉ định loại token, và trong trường hợp này luôn là “JWT”. Thứ hai là “alg”, chỉ định thuật toán mã hóa được sử dụng, ví dụ như “HS256” (HMAC SHA-256) hoặc “RS256” (RSA SHA-256).

Ví dụ về header của một JWT sẽ trông như sau:

{

  “alg”: “HS256”,

  “typ”: “JWT”

}

Đoạn JSON này sau đó sẽ được mã hóa sử dụng base64url encoding, trở thành chuỗi đầu tiên trong 3 chuỗi tạo nên một JWT hoàn chỉnh. Việc mã hóa header này là bước quan trọng, đảm bảo tính toàn vẹn và an toàn của token.

Payload

Trong JWT, phần payload chứa các claims. Trong lĩnh vực bảo mật thông tin, các claims đại diện cho các tuyên bố về quyền truy cập hoặc quyền sử dụng các tài nguyên. Chúng có thể được hiểu như các tuyên bố của một thực thể (ví dụ: user_id) và các thông tin liên quan đến nó.

Các claims được biểu diễn dưới dạng cặp key-value, cho phép mô tả các thông tin cần thiết để xác định và ủy quyền truy cập vào tài nguyên.

Có 3 loại claims chính: Registered claims, Public claims và Private claims.

Registered claims

Registered Claims là những claims được định nghĩa và công nhận trước đó. Mặc dù việc sử dụng Registered Claims không phải là bắt buộc, nhưng các claims này lại đóng vai trò rất quan trọng, cung cấp nhiều chức năng và thông tin hữu ích.

Một số Registered Claims phổ biến trong JWTMột số Registered Claims phổ biến trong JWT

Public Claims 

Public Claims là những claims được định nghĩa bởi người dùng, và được sử dụng rộng rãi trong JWT. Mặc dù việc sử dụng Public Claims không bắt buộc, tuy nhiên để tránh xung đột, các tên của Public Claims được xác định theo một danh sách công khai và phổ biến.

Danh sách các Public Claims Name phổ biến trong  JSON Web TokensDanh sách các Public Claims Name phổ biến trong  JSON Web Tokens

Private Claims

Ngoài Registered Claims và Public Claims, các bên sử dụng JWT có thể cần tới những claims không thuộc về hai loại trên. Đây được gọi là Private Claims – những claims mà các bên tự thỏa thuận và định nghĩa riêng, không có bất kỳ tài liệu hay tiêu chuẩn chung nào.

Việc sử dụng Private Claims mang lại sự linh hoạt và tùy biến cho các ứng dụng sử dụng JWT. Tuy nhiên, cần lưu ý rằng để đảm bảo tính nhỏ gọn của JWT, các tên claims chỉ nên sử dụng tối đa ba ký tự.

Signature 

Signature là phần cuối cùng của một JWT, có vai trò xác thực danh tính của người gửi. Để tạo ra một Signature chính xác, cần thực hiện các bước sau:

  • Mã hóa (encode) phần Header và phần Payload của JWT.
  • Chọn phương pháp mã hóa (cryptographic) phù hợp, như đã được xác định trong phần Header.
  • Sử dụng Secret Key để thực hiện quá trình ký (sign) dữ liệu đã được mã hóa ở bước 1.

Việc tạo ra một Signature hợp lệ là rất quan trọng, vì nó cho phép người nhận xác minh được danh tính của người gửi JWT. Quá trình này đảm bảo tính toàn vẹn và xác thực của thông tin được truyền tải.

Signature là phần cuối cùng của một JWT có vai trò xác thực danh tính của người gửiSignature là phần cuối cùng của một JWT có vai trò xác thực danh tính của người gửi

Cả bên gửi và bên nhận JWT đều sử dụng cùng một hàm để tính toán và xác minh phần Signature. Nếu thông tin này (bao gồm Header và Payload) không khớp giữa hai bên, JWT sẽ được coi là không hợp lệ.

Việc này là do chỉ có người nắm giữ Secret Key mới có thể tạo ra một Signature hợp lệ. Do đó, việc sử dụng Signature để xác thực danh tính người gửi trở nên vô cùng quan trọng. Bên nhận có thể tin tưởng rằng JWT được gửi từ nguồn đáng tin cậy, bởi vì chỉ có người sở hữu Secret Key mới có thể tạo ra Signature hợp lệ.

Cơ chế hoạt động của JWT

Để có cái nhìn sâu sắc hơn về cơ chế hoạt động của JSON Web Tokens, chúng ta có thể xem xét một ví dụ cụ thể liên quan đến xác thực (Authentication) người dùng. Khi người dùng cung cấp thông tin đăng nhập như tên tài khoản và mật khẩu vào trình duyệt, thông tin này sẽ được gửi tự động về phía máy chủ (server) để tiến hành xác thực.

Thay vì tạo một phiên làm việc (session) trên máy chủ và trả về cookie cho trình duyệt, máy chủ sẽ sinh ra một chuỗi JWT và gửi lại cho trình duyệt. Thay vì lưu trữ thông tin phiên làm việc trên máy chủ, JWT có thể được lưu trữ trong LocalStorage hoặc cookie của trình duyệt.

ví dụ cụ thể liên quan về cơ chế hoạt động của JW về vấn đề xác thực (Authentication) người dùngví dụ cụ thể liên quan về cơ chế hoạt động của JW về vấn đề xác thực (Authentication) người dùng

Những ưu điểm nổi bật của JSON Web Tokens

Với những ưu điểm nổi bật, JWT đã trở thành một giải pháp lý tưởng cho việc quản lý và truyền tải thông tin người dùng:

Gọn nhẹ

JSON Web Token là một giải pháp compact, có thể truyền tải dữ liệu giữa các bên một cách nhanh chóng và hiệu quả. Kích thước nhỏ gọn của JWT giúp giảm tải trọng cho các ứng dụng, đặc biệt là những ứng dụng di động hoặc các ứng dụng có băng thông mạng hạn chế.

Bảo mật

JWT sử dụng các kỹ thuật mã hóa để đảm bảo tính toàn vẹn và xác thực của dữ liệu trong quá trình trao đổi. Cấu trúc của JWT bao gồm ba phần: header, payload và signature, cho phép chống lại các cuộc tấn công giả mạo, đảm bảo an toàn thông tin cho người dùng.

JWT cho phép chống lại các cuộc tấn công giả mạo và đảm bảo an toàn thông tin cho người dùngJWT cho phép chống lại các cuộc tấn công giả mạo và đảm bảo an toàn thông tin cho người dùng

Phổ Biến

JWT dựa trên định dạng JSON, một định dạng dữ liệu phổ biến và được hỗ trợ rộng rãi trong các ngôn ngữ lập trình. Nhờ vậy mà giúp việc triển khai và tích hợp JWT trở nên dễ dàng hơn, cho phép sử dụng trên nhiều nền tảng và thiết bị khác nhau.

Khuyết Điểm của JSON Web Tokens

Mặc dù JSON Web Tokens mang lại nhiều ưu điểm nổi bật, nhưng chúng cũng không phải là hoàn hảo. Như với bất kỳ công nghệ nào, JWT cũng có một số hạn chế và khuyết điểm mà người dùng cần lưu ý:

Kích Thước

Mặc dù JWT có kích thước nhỏ gọn, nhưng do được truyền trong HTTP Header, nên kích thước tối đa của JWT bị giới hạn khoảng 8KB. Điều này có thể gây ra một số hạn chế khi sử dụng JWT trong các ứng dụng có yêu cầu truyền tải lượng dữ liệu lớn.

Rủi Ro Bảo Mật

Nếu JWT không được quản lý và sử dụng một cách cẩn thận thì có thể dẫn đến các rủi ro bảo mật. Ví dụ, nếu không kiểm tra tính hợp lệ của signature hoặc không kiểm tra thời gian hết hạn của token, kẻ tấn công có thể lợi dụng các lỗ hổng này để truy cập trái phép vào thông tin. Việc để thời gian hết hạn của JWT quá dài cũng có thể tạo ra các lỗ hổng tương tự.

JWT được ứng dụng ở những trường hợp nào?

JWT (JSON Web Tokens) là một tiêu chuẩn mã hoá thông tin được ứng dụng rộng rãi trong thực tế. Có thể kể đến hai trường hợp tiêu biểu và được ứng dụng phổ biến nhất, đó là:

  • Uỷ quyền (Authentication): Đây là ứng dụng phổ biến nhất của JWT. Khi người dùng đăng nhập vào hệ thống, họ sẽ được cấp một mã JWT. Những yêu cầu tiếp theo từ người dùng như truy cập tài nguyên, dịch vụ,… sẽ kèm theo mã JWT này, cho phép người dùng có quyền truy cập vào các URL, dịch vụ và tài nguyên mà mã token cho phép.
  • Trao đổi thông tin (Information Exchange): JWT cung cấp một phương thức an toàn để truyền thông tin giữa các thành viên, dựa trên phần chữ ký (signature) của token. Phía người nhận có thể xác định được người gửi thông tin là ai và kiểm tra xem chữ ký có bị giả mạo hay không.

Uỷ quyền (Authentication) là ứng dụng phổ biến nhất của JWTUỷ quyền (Authentication) là ứng dụng phổ biến nhất của JWT

Với nhiều ưu điểm nổi bật, JWT trở thành giải pháp an ninh được ứng dụng rộng rãi trong nhiều ứng dụng hiện đại. Việc hiểu rõ về cấu trúc và cách thức hoạt động của JSON Web Tokens sẽ giúp các nhà phát triển triển khai các ứng dụng an toàn hơn, nâng cao trải nghiệm người dùng và bảo vệ dữ liệu nhạy cảm. Khi triển khai mã nguồn mở này một cách hiệu quả, bạn sẽ đạt được sự cân bằng giữa độ bảo mật an ninh và trải nghiệm người dùng.

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.
0981578920
icons8-exercise-96