Mọi người đã bao giờ thắc mắc tại sao chỉ với một nút "Đăng nhập bằng Google" mà bạn có thể truy cập hàng loạt ứng dụng mà không phải nhớ thêm tài khoản, nhưng dữ liệu cá nhân vẫn được bảo vệ? Tất cả là nhờ sự kết hợp giữa OAuth và MFA, hai công nghệ bảo mật đang giữ vai trò nền tảng cho thế giới số ngày nay.
Hãy tưởng tượng mọi người muốn sử dụng ứng dụng quản lý công việc mới nhưng không muốn tạo thêm tài khoản. Và lúc này, Nút "Đăng nhập bằng Google" chính là OAuth đang hoạt động.
Trước OAuth: Người dùng phải đưa username/password Google cho ứng dụng → Cực kỳ nguy hiểm!
Với OAuth: Google "ủy quyền" cho ứng dụng truy cập thông tin của người dùng mà không cần biết mật khẩu.
OAuth Flow

Bước 1: App (ứng dụng) chuyển hướng bạn đến Google/Facebook với yêu cầu: "Tôi cần truy cập email và tên của user này"
Bước 2: Bạn đăng nhập Google/Facebook và xem thông báo: "App X muốn truy cập email và tên của bạn. Đồng ý?"
Bước 3: Nếu đồng ý, Google/Facebook tạo authorization code (như một tấm vé tạm thời) và gửi bạn về App kèm code này
Bước 4: App lấy authorization code + client_secret (mật khẩu riêng của App) gửi cho Google/Facebook để đổi lấy access token (chìa khóa thật)
Bước 5: App dùng access token để lấy thông tin từ Resource Server (máy chủ của Google/Facebook)
Điểm quan trọng: Bạn chưa bao giờ đưa mật khẩu Google cho App!
OAuth 1.0 vs 2.0 vs 2.1
OAuth 1.0 (2007): Phức tạp, dùng chữ ký mật mã cho mỗi request. An toàn nhưng khó code.
OAuth 2.0 (2012): Đơn giản hóa, dựa vào HTTPS. Đây là version chúng ta dùng hàng ngày.
OAuth 2.1 (2024): Loại bỏ những cách không an toàn, bắt buộc PKCE (sẽ giải thích bên dưới).
PKCE - Lớp bảo mật thêm
Vấn đề: Authorization code có thể bị đánh cắp trên đường truyền.
Giải pháp PKCE:
- App tạo code_verifier (chuỗi ngẫu nhiên)
- Hash nó thành code_challenge
- Gửi challenge cho Authorization Server, giữ verifier ở máy
- Khi đổi token, phải chứng minh có verifier gốc
MFA - Khóa nhiều lớp
Nguyên tắc: Thay vì 1 "chìa khóa", dùng 2-3 loại khác nhau:
Something you know: Mật khẩu, PIN
Something you have: Điện thoại, USB security key
Something you are: Vân tay, khuôn mặt
Các loại MFA phổ biến:
1. SMS OTP: Nhận mã qua tin nhắn
- Ưu: Đơn giản
- Nhược: Có thể bị SIM swapping
- App tạo mã 6 số mỗi 30 giây
- Dựa trên secret key + thời gian hiện tại
- An toàn hơn SMS
- Dùng vân tay, Face ID
- Private key không bao giờ rời khỏi thiết bị
- Chống phishing 100%
- Bạn nhấn "Đăng nhập bằng Microsoft"
- Microsoft yêu cầu MFA (nhập mã từ phone)
- Hoàn thành MFA → Nhận authorization code
- App đổi code lấy access token
- Dùng token truy cập Microsoft API

Tại sao quan trọng?
Scalability: Token-based, không cần lưu session trung tâm
Security: Tách biệt authentication và authorization
User Experience: Single Sign-On, không cần nhớ nhiều mật khẩu
API Economy: Cho phép apps kết nối an toàn với nhau
Điều cần nhớ
Giao thức -> OAuth = Ủy quyền ("Bạn được làm gì?")
Cơ chế -> MFA = Xác thực mạnh ("Chắc chắn bạn là ai?")
Hai công nghệ này kết hợp tạo nên nền tảng bảo mật cho hầu hết ứng dụng hiện đại. Hiểu rõ chúng giúp bạn thiết kế hệ thống tốt hơn và debug các vấn đề authentication/authorization hiệu quả.
Security không phải là destination mà là journey. OAuth và MFA là những tools quan trọng trong hành trình đó.