Cookie & Session vs JWT & LocalStorage trong xác thực

15:59 05/03/2025

Sau khi người dùng được xác thực, hệ thống có thể cấp quyền truy cập, tùy thuộc vào các quyền hạn đã được cấp cho người dùng đó. Vì vậy, việc bảo vệ thông tin xác thực và dữ liệu người dùng trở thành yếu tố quan trọng trong việc xây dựng các ứng dụng web bảo mật.

Xác Thực (Authentication) là gì?

Xác thực (Authentication) là quá trình xác minh danh tính của người dùng hoặc hệ thống, đảm bảo rằng người truy cập hệ thống thực sự là người mà họ tuyên bố. Quá trình xác thực này thường bắt đầu khi người dùng đăng nhập vào ứng dụng bằng cách cung cấp thông tin chứng thực như tên người dùng và mật khẩu. Mục tiêu của xác thực là bảo vệ hệ thống khỏi các truy cập trái phép và đảm bảo rằng chỉ những người dùng có quyền mới có thể truy cập vào các tài nguyên hệ thống.

Trong phát triển web, xác thực người dùng là một trong những yếu tố quan trọng nhất để bảo vệ ứng dụng khỏi các mối nguy hiểm. Có nhiều phương thức lưu trữ và truyền tải thông tin xác thực. Hai nhóm công nghệ phổ biến được sử dụng để xử lý xác thực là Cookie & Session và JWT (JSON Web Token) & LocalStorage. Bài viết này sẽ giải thích chi tiết về từng phương thức và cách thức hoạt động của chúng trong xác thực.

  1. Cookie & Session

Cookie là gì?

Cookie là một đoạn dữ liệu nhỏ được gửi từ máy chủ tới trình duyệt và được lưu trữ trên thiết bị người dùng. Cookie có thể chứa thông tin như mã phiên (session ID), thông tin người dùng, hoặc các dữ liệu nhỏ khác. Cookie thường được sử dụng để duy trì trạng thái người dùng giữa các phiên làm việc của họ.

Session là gì?

Session (phiên làm việc) là một cơ chế lưu trữ tạm thời trên máy chủ. Khi người dùng đăng nhập vào ứng dụng, máy chủ tạo ra một phiên làm việc và lưu trữ thông tin người dùng, chẳng hạn như ID người dùng, quyền hạn, hoặc các thông tin khác liên quan đến người dùng. Mỗi phiên làm việc thường có một mã phiên (session ID) và máy chủ sử dụng mã này để nhận diện người dùng và trạng thái của họ.

Quá trình hoạt động của Cookie & Session trong xác thực

Khi người dùng đăng nhập vào hệ thống, máy chủ sẽ tạo một phiên làm việc (session). Một cookie chứa session ID sẽ được gửi về trình duyệt của người dùng. Mỗi khi người dùng thực hiện yêu cầu từ trình duyệt (ví dụ: tải trang mới), cookie chứa session ID sẽ được gửi kèm theo yêu cầu đó. Máy chủ sẽ nhận diện người dùng thông qua session ID trong cookie và trả về nội dung tương ứng.

Khi người dùng đăng xuất, máy chủ sẽ xóa phiên làm việc khỏi cơ sở dữ liệu và xóa cookie trên trình duyệt của người dùng.

Ưu điểm của Cookie & Session

  • Bảo mật cao hơn: Cookie và session có thể được bảo mật với các thiết lập như HttpOnly (cookie chỉ có thể được truy cập qua HTTP) và Secure (chỉ gửi cookie qua kết nối HTTPS).
  • Không phải tải lại thông tin mỗi lần: Dữ liệu được lưu trữ trên máy chủ, giúp giảm tải cho client và dễ dàng kiểm soát dữ liệu của người dùng.

Nhược điểm của Cookie & Session

  • Lưu trữ trên máy chủ: Dữ liệu phiên làm việc cần phải lưu trữ trên máy chủ, điều này có thể gây tốn kém tài nguyên nếu lượng người dùng lớn.
  • Không dễ dàng mở rộng: Khi ứng dụng phát triển và có nhiều máy chủ, việc đồng bộ hóa session giữa các máy chủ có thể gặp khó khăn.
  1. JWT (JSON Web Token) & LocalStorage

JWT là gì?

JWT (JSON Web Token) là một tiêu chuẩn mở để truyền tải thông tin giữa các bên dưới dạng một chuỗi ký tự JSON. Thông tin trong JWT được mã hóa và có thể được xác thực mà không cần lưu trữ trên máy chủ. Vì vậy, JWT là một phương thức phổ biến trong các ứng dụng phân tán và vi mô.

JWT bao gồm ba phần chính:

  • Header: Chứa thông tin về loại mã hóa và thuật toán.
  • Payload: Chứa các tuyên bố (claims), chẳng hạn như thông tin người dùng.
  • Signature: Được sử dụng để xác thực tính toàn vẹn của token và bảo mật thông tin.

Header (Tiêu đề)

Phần Header chứa thông tin về loại mã hóa và thuật toán được sử dụng để ký (sign) token. Thông tin này giúp người nhận token biết cách giải mã và kiểm tra tính hợp lệ của token.

Cấu trúc của Header thường bao gồm hai phần chính:

  • alg: Thuật toán mã hóa được sử dụng để ký JWT. Ví dụ phổ biến là HS256 (HMAC SHA-256) và RS256 (RSA SHA-256).
  • typ: Loại của token, thường là JWT.

Payload (Nội dung)

Phần Payload chứa các tuyên bố (claims) về thông tin người dùng hoặc các quyền hạn. Claims có thể được chia thành ba loại:

  • Registered Claims: Những tuyên bố đã được định nghĩa sẵn trong JWT, ví dụ: sub (subject), iat (issued at), exp (expiration), iss (issuer), và aud (audience).
  • Public Claims: Các tuyên bố tự định nghĩa nhưng cần tránh trùng với Registered Claims.
  • Private Claims: Các tuyên bố không cần tuân theo chuẩn chung, ví dụ: role, userId, email.

Signature (Chữ ký)

Phần Signature giúp đảm bảo tính toàn vẹn và bảo mật của JWT. Khi tạo ra JWT, phần Signature sẽ được tạo ra bằng cách mã hóa phần Header và Payload và sau đó sử dụng một khóa bí mật (đối với HMAC SHA-256) hoặc một cặp khóa công khai và khóa bí mật (đối với RSA SHA-256) để ký chúng.

Signature có chức năng xác thực tính toàn vẹn của token. Nếu phần Header hoặc Payload bị thay đổi, chữ ký sẽ không hợp lệ, và máy chủ sẽ từ chối token.

LocalStorage là gì?

LocalStorage là một phương thức lưu trữ dữ liệu trên trình duyệt. Dữ liệu lưu trữ trong LocalStorage có thể tồn tại cho đến khi người dùng xóa nó hoặc trình duyệt được đóng. Điều này giúp dữ liệu có thể dễ dàng truy xuất lại trong suốt vòng đời của ứng dụng hoặc khi người dùng quay lại ứng dụng sau khi đóng trình duyệt.

Quá trình hoạt động của JWT & LocalStorage trong xác thực

Khi người dùng đăng nhập, nếu thông tin hợp lệ, máy chủ sẽ tạo một JWT và gửi về client. Trình duyệt sẽ lưu trữ JWT vào LocalStorage. Mỗi khi người dùng gửi yêu cầu tới máy chủ, JWT sẽ được gửi trong header của yêu cầu HTTP (thông qua Authorization header với giá trị Bearer <JWT>). Máy chủ sẽ kiểm tra chữ ký của JWT để xác thực và đảm bảo tính toàn vẹn của thông tin.

Ưu điểm của JWT & LocalStorage

  • Không cần lưu trữ trên máy chủ: Dữ liệu xác thực được lưu trữ trên client (trong LocalStorage), giúp giảm tải cho máy chủ.
  • Mở rộng dễ dàng: Vì thông tin được lưu trữ và truyền tải dưới dạng JSON, việc mở rộng ứng dụng hoặc sử dụng các microservices trở nên dễ dàng hơn.
  • Không phụ thuộc vào cookie: JWT có thể được sử dụng trong các ứng dụng di động hoặc ứng dụng không cần dùng cookie.

Nhược điểm của JWT & LocalStorage

  • Vấn đề bảo mật: JWT được lưu trữ trong LocalStorage có thể bị khai thác nếu ứng dụng bị tấn công Cross-Site Scripting (XSS). Dù JWT có thể mã hóa thông tin, nhưng nó vẫn có thể bị đọc bởi JavaScript trên trình duyệt.
  • Không hỗ trợ tự động hủy phiên: Nếu người dùng đăng xuất, JWT vẫn còn trong LocalStorage cho đến khi được xóa bằng cách thủ công.

Kết luận

Mỗi phương pháp xác thực có những ưu điểm và nhược điểm riêng. Cookie & Session thường được ưa chuộng vì tính bảo mật cao và dễ kiểm soát trên máy chủ. Tuy nhiên, nó có thể gặp khó khăn khi ứng dụng mở rộng. Ngược lại, JWT & LocalStorage giúp giảm tải cho máy chủ và dễ dàng mở rộng, nhưng nó có thể gặp phải vấn đề bảo mật nếu không được bảo vệ đúng cách. Việc lựa chọn phương thức xác thực phù hợp phụ thuộc vào yêu cầu bảo mật và đặc điểm của ứng dụng.

Giảng viên Lê Văn Hiển
Bộ môn Công nghệ thông tin
FPT Polytechnic Hà Nội

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.