Auth0 Bài 1: Auth0 là gì? Sự khác biệt giữa Authentication (Xác thực) và Authorization (Phân quyền).
Trong phát triển ứng dụng, kiến trúc bảo mật luôn bắt đầu từ việc hiểu đúng các khái niệm nền tảng về định danh và quyền hạn.
1. Auth0 là gì?
Theo cách hiểu truyền thống, khi xây dựng một trang web có chức năng đăng nhập, bạn sẽ phải tự làm rất nhiều việc: tạo bảng Users trong database, viết code băm (hash) mật khẩu bằng bcrypt, xử lý quên mật khẩu, gửi email xác nhận, và tự tạo ra JWT (JSON Web Token) để quản lý phiên làm việc.
Auth0 sinh ra để thay bạn làm tất cả những việc đó. Auth0 là một nền tảng Identity as a Service (IDaaS). Nó đóng vai trò như một "người gác cổng" chuyên nghiệp được thuê ngoài (outsource) cho ứng dụng của bạn.
Thay vì tự xây dựng luồng đăng nhập phức tạp và đầy rủi ro bảo mật, ứng dụng của bạn chỉ cần "đá" người dùng sang trang đăng nhập do Auth0 cung cấp. Sau khi người dùng đăng nhập thành công (qua email/password, Google, Facebook, hoặc FaceID), Auth0 sẽ trả về cho ứng dụng của bạn một Token hợp lệ để chứng minh danh tính của họ.
Tại sao các dự án hiện đại lại chọn Auth0?
- Bảo mật cấp độ cao: Không còn nỗi lo bị lộ database chứa mật khẩu của người dùng. Auth0 tuân thủ các tiêu chuẩn bảo mật khắt khe nhất (SOC 2, ISO 27001).
- Tiết kiệm thời gian: Thay vì mất hàng tuần để code tính năng "Quên mật khẩu", "Đăng nhập bằng Google", hay "Bảo mật 2 lớp (MFA)", bạn chỉ cần vài cú click chuột trên Auth0 Dashboard.
- Single Sign-On (SSO): Nếu công ty bạn có nhiều ứng dụng khác nhau (ví dụ: một app nội bộ, một diễn đàn, một web bán hàng), người dùng chỉ cần đăng nhập một lần bằng Auth0 là có thể truy cập tất cả.
2. Sự khác biệt giữa Authentication và Authorization
Trong thế giới IAM (Identity and Access Management), hai khái niệm này thường bị gọi gộp là "Auth", khiến nhiều lập trình viên mới nhầm lẫn chúng là một. Thực tế, chúng là hai quá trình hoàn toàn khác biệt và xảy ra nối tiếp nhau.

A. Authentication (Xác thực danh tính)
- Câu hỏi cốt lõi: "Bạn là ai?" (Who are you?)
- Bản chất: Đây là quá trình hệ thống kiểm tra xem danh tính người dùng cung cấp có đúng sự thật hay không.
- Ví dụ thực tế: Khi bạn ra sân bay, nhân viên an ninh yêu cầu bạn đưa Hộ chiếu. Việc họ nhìn mặt bạn và đối chiếu với ảnh trên Hộ chiếu chính là Authentication. Họ xác nhận bạn đúng là "Nguyễn Văn A".
- Trong ứng dụng: Người dùng nhập Username/Password, hoặc quét vân tay, hoặc nhấn "Log in with Google".
- Kết quả: Hệ thống biết chính xác định danh của user (ví dụ: User ID, Email, Tên hiển thị).
B. Authorization (Phân quyền truy cập)
- Câu hỏi cốt lõi: "Bạn được phép làm gì?" (What can you do?)
- Bản chất: Sau khi đã biết bạn là ai, hệ thống phải quyết định xem bạn có quyền truy cập vào tài nguyên (resource) nào.
- Ví dụ thực tế: Cầm Hộ chiếu (đã xác thực) không có nghĩa là bạn được lên bất kỳ máy bay nào. Bạn cần có Vé máy bay (Boarding Pass). Cái vé đó chính là Authorization. Nó quy định rõ bạn chỉ được lên chuyến bay VN213, ngồi ghế 12A, và không được phép đi vào buồng lái của phi công.
- Trong ứng dụng: Một người dùng (đã đăng nhập thành công) cố gắng bấm nút "Xóa bài viết". Hệ thống kiểm tra xem người này có role là Admin hay chỉ là Regular User.
- Kết quả: Hệ thống cho phép (Allow) hoặc từ chối (Deny - lỗi 403 Forbidden) hành động của user.
Bảng so sánh nhanh
| Tiêu chí | Authentication (Xác thực - AuthN) | Authorization (Phân quyền - AuthZ) |
|---|---|---|
| Mục đích | Xác minh danh tính người dùng. | Kiểm tra quyền hạn của người dùng. |
| Thứ tự | Xảy ra trước. | Xảy ra sau khi đã Authentication. |
| Phương thức | Mật khẩu, OTP, Sinh trắc học (vân tay, khuôn mặt), Social Login. | Role-Based Access Control (RBAC), Attribute-Based Access Control (ABAC). |
| Token thường dùng | ID Token (chuẩn OpenID Connect) | Access Token (chuẩn OAuth2) |
Ghi nhớ: Auth0 cung cấp giải pháp cho cả hai vấn đề này. Nó vừa giúp bạn xác thực người dùng, vừa giúp bạn đính kèm các "quyền hạn" (Permissions/Roles) vào bên trong Access Token để Backend của bạn kiểm tra.
All rights reserved