Tuesday, April 14, 2026

OAuth2 và JWT: "Cặp bài trùng" bảo mật mọi ứng dụng hiện đại

Trong thế giới Internet, việc bảo mật cũng giống như việc bạn đi thuê một căn hộ chung cư cao cấp. Bạn cần một quy trình để nhận chìa khóa (OAuth2) và bản thân chiếc chìa khóa đó phải có thông tin xác nhận bạn là ai (JWT).

1. OAuth2: Quy trình "Cấp phép" thông minh

Nhiều người lầm tưởng OAuth2 là một phương thức đăng nhập, nhưng thực tế nó là một framework ủy quyền (Authorization).

Hãy tưởng tượng: Bạn muốn một ứng dụng in ảnh truy cập vào kho ảnh trên Google Drive của bạn. Thay vì đưa mật khẩu Google cho ứng dụng đó (rất nguy hiểm!), bạn chỉ cần xác nhận qua Google. Google sẽ đưa cho ứng dụng kia một "chiếc thẻ tạm thời". Đó chính là OAuth2.

Tìm hiểu về OAuth 2.0 và OpenID Connect là gì? - Sunteco | Beyond The Clouds

Các thành phần chính trong OAuth2:

  • Resource Owner: Chính là bạn (người sở hữu dữ liệu).

  • Client: Ứng dụng muốn mượn dữ liệu (ví dụ: Canva, Spotify).

  • Authorization Server: Nơi xác thực danh tính của bạn (Google, Facebook, GitHub).

  • Resource Server: Nơi lưu trữ dữ liệu thật (Google Drive, danh sách bạn bè). 


2. JWT (JSON Web Token): "Chiếc thẻ bài" vạn năng

Sau khi OAuth2 hoàn tất quy trình "xin phép", cái mà ứng dụng nhận được thường là một chuỗi ký tự đặc biệt. Trong các hệ thống hiện đại, chuỗi này thường là một JWT.

JWT là một phương thức truyền tin an toàn giữa các bên dưới dạng một đối tượng JSON. Nó có 3 phần, ngăn cách bởi dấu chấm (.):

  1. Header: Chứa loại token và thuật toán mã hóa (ví dụ: HS256).

  2. Payload: Chứa "thông tin thật" (User ID, tên, quyền hạn, thời gian hết hạn).

  3. Signature: Chữ ký số để đảm bảo token này chưa bị ai sửa đổi giữa đường.


3. Tại sao OAuth2 và JWT lại đi cùng nhau?

Hãy xem cách chúng phối hợp trong một kịch bản thực tế:

  1. Đăng nhập: Bạn bấm "Đăng nhập bằng Google".

  2. Ủy quyền (OAuth2): Google hỏi "Bạn có cho phép App này xem Email không?". Bạn chọn "Có".

  3. Cấp thẻ (JWT): Google gửi trả về cho App một mã JWT.

  4. Sử dụng: Mỗi lần App gửi yêu cầu lấy dữ liệu, nó chỉ cần đính kèm mã JWT này vào Header. Server sẽ kiểm tra chữ ký của JWT, nếu đúng thì trả dữ liệu ngay mà không cần bắt bạn đăng nhập lại hay hỏi ý kiến Google nữa.


4. Ưu điểm "đáng đồng tiền bát gạo"

Không cần lưu trữ phía Server (Stateless)

Khác với Session truyền thống (Server phải nhớ từng người đang đăng nhập), với JWT, mọi thông tin cần thiết đã nằm sẵn trong Token. Server chỉ cần giải mã và kiểm tra, giúp hệ thống cực kỳ dễ mở rộng (Scalability).

Khả năng dùng chung (Cross-domain)

JWT có thể được dùng cho nhiều Domain khác nhau. Đây là lý do tại sao một hệ thống Microservices cực kỳ yêu thích cặp đôi này.


5. Một vài lưu ý nhỏ để không bị "hớ"

Dù rất mạnh mẽ, nhưng bạn cần nhớ:

  • Đừng để lộ JWT: JWT giống như tiền mặt, ai nhặt được cũng có thể tiêu. Hãy luôn dùng HTTPS.

  • Payload không phải là bí mật: Dữ liệu trong Payload chỉ được mã hóa Base64, ai cũng có thể đọc được. Đừng bao giờ bỏ mật khẩu hay thông tin nhạy cảm vào đó!

  • Vấn đề thu hồi: Vì JWT có tính "tự quản", rất khó để hủy một token trước khi nó hết hạn. Do đó, hãy đặt thời gian hết hạn (Expiration time) ngắn thôi nhé.

Kết luận

OAuth2 cung cấp quy trình an toàn, còn JWT cung cấp phương tiện vận chuyển thông tin hiệu quả. Hiểu rõ bộ đôi này sẽ giúp bạn xây dựng những hệ thống không chỉ chạy tốt mà còn khiến người dùng yên tâm về dữ liệu của họ.

Bạn đang dùng JWT cho dự án của mình chứ? Bạn có gặp khó khăn gì khi triển khai Refresh Token không? Hãy để lại bình luận để mình giải đáp nhé!

No comments:

Post a Comment