LỊCH SỬ OAUTH: TỪ MẬT KHẨU ĐẾN CÁC TIÊU CHUẨN TOÀN CẦU

Bạn thấy điều đó mỗi ngày. Bạn nhấp vào "Đăng nhập bằng Google" hoặc "Đăng nhập bằng GitHub". Bạn không cần nhập mật khẩu. Bạn truy cập vào trang web ngay lập tức.

Điều này hoạt động được là nhờ OAuth. Nó là tiêu chuẩn toàn cầu về bảo mật. Nhưng nó không bắt đầu như thế này. Nó đã tiến hóa để giải quyết những vấn đề khổng lồ.

Vấn đề của mật khẩu

Trong những ngày đầu, bạn phải tạo một mật khẩu mới cho mỗi trang web. Điều này gây ra ba vấn đề lớn:

  • Mọi người sử dụng cùng một mật khẩu ở mọi nơi. Nếu một trang web bị rò rỉ, mọi tài khoản đều gặp nguy hiểm.
  • Mọi người quên mật khẩu. Họ dành nhiều thời gian để nhấp vào "quên mật khẩu" hơn là sử dụng web.
  • Các trang web nhìn thấy mật khẩu thô của bạn. Nếu một trang web bị hack, mật khẩu của bạn sẽ bị lộ.

Sự tiến hóa của bảo mật

  1. Basic Auth: Bạn gửi tên người dùng và mật khẩu của mình với mỗi yêu cầu. Nếu bạn không sử dụng HTTPS, tin tặc có thể nhìn thấy mọi thứ.

  2. Session Cookies: Bạn đăng nhập một lần và nhận được một ID phiên làm việc (session ID). Nó tốt hơn, nhưng cookie có thể bị đánh cắp thông qua các cuộc tấn công như XSS hoặc CSRF. Ngoài ra, một trang web không thể sử dụng thông tin đăng nhập của bạn để giao tiếp với một trang web khác.

  3. API Keys: Bạn cung cấp cho một trang web một mã khóa đặc biệt. Điều này tốt hơn vì bạn không gửi mật khẩu của mình. Tuy nhiên, các API key thường có quá nhiều quyền hạn. Nếu bạn đưa một API key cho một ứng dụng, ứng dụng đó có thể có quyền đọc email, gửi tin nhắn và xóa tài khoản của bạn. Nó giống như việc bạn đưa chìa khóa xe cho nhân viên đỗ xe (valet) tại khách sạn, nhưng chiếc chìa khóa đó cũng có thể mở được cả nhà bạn.

Giải pháp OAuth: Chìa khóa Valet

OAuth đã thay đổi cuộc chơi. Thay vì đưa mật khẩu, bạn đưa một "token". Hãy coi nó như một chiếc chìa khóa valet. Chìa khóa valet cho phép tài xế đỗ xe của bạn, nhưng không cho phép họ mở cốp xe hoặc vào nhà bạn.

Cách OAuth hoạt động trong thực tế:

  • Bạn muốn sử dụng Canva và lấy ảnh từ Google.
  • Canva yêu cầu Google cấp quyền.
  • Google hỏi bạn: "Canva có thể xem ảnh của bạn không?"
  • Bạn trả lời: "Có, nhưng chỉ được xem. Không được phép xóa bất cứ thứ gì."
  • Google cấp cho Canva một token cụ thể.

Canva không bao giờ nhìn thấy mật khẩu Google của bạn. Ngay cả khi tin tặc đánh cắp được token đó, chúng cũng chỉ có thể xem ảnh trong một thời gian ngắn. Chúng không thể thay đổi mật khẩu hoặc chuyển tiền của bạn.

Bảo mật hiện đại: PKCE

Các ứng dụng di động và ứng dụng web có một điểm yếu. Chúng không thể che giấu các bí mật một cách hiệu quả. Để khắc phục điều này, chúng ta sử dụng PKCE (Proof Key for Code Exchange).

Nó hoạt động giống như một hệ thống đặt chỗ:

  • Ứng dụng tạo ra một mã bí mật (verifier).
  • Ứng dụng gửi một phiên bản đã được băm của mã đó (challenge) tới Google.
  • Khi ứng dụng yêu cầu token, nó sẽ gửi mã bí mật gốc.
  • Google kiểm tra xem mã đó có khớp với thử thách (challenge) hay không.

Nếu chúng khớp nhau, Google biết đó chính là ứng dụng ban đầu. Nếu không khớp, Google sẽ chặn yêu cầu. Điều này ngăn chặn tin tặc đánh cắp mã ủy quyền (authorization code) của bạn.

Lộ trình phát triển của OAuth

  • 2007 (OAuth 1.0): Rất phức tạp và sử dụng các phép toán nặng nề.
  • 2012 (OAuth 2.0): Nhanh hơn và dễ dàng hơn. Nó sử dụng token và yêu cầu HTTPS.
  • 2016 (OAuth 2.0 + PKCE): Thêm tính bảo mật cho các ứng dụng di động và web hiện đại.
  • 2023 (OAuth 2.1): Tiêu chuẩn vàng mới. Nó loại bỏ các phương thức cũ không an toàn.

Bài học cốt lõi: Đừng bao giờ đưa mật khẩu của bạn cho một ứng dụng khác. Hãy đưa cho họ một "tấm vé" có giới hạn và có thời hạn hết hạn. Bạn sẽ luôn giữ được quyền kiểm soát.

Source: https://dev.to/gophernment/oauth-elaaaebbprawatisaastr-cchaakrhasphaan-suumaatrthaanolk-16b4