1. Authentication & Authorization là gì?
Authentication và Authorization là hai khái niệm quan trọng trong bảo mật hệ thống, đặc biệt khi phát triển Website, Mobile App và REST API. Cả hai đều giúp kiểm soát việc truy cập vào hệ thống nhưng đảm nhiệm hai chức năng khác nhau.
Authentication là quá trình xác minh danh tính của người dùng hoặc hệ thống đang gửi yêu cầu. Mục đích là xác định đối tượng truy cập có đúng với danh tính mà họ cung cấp hay không.
Ví dụ: Khi người dùng đăng nhập vào một ứng dụng bằng email và mật khẩu, hệ thống sẽ kiểm tra thông tin đăng nhập. Nếu thông tin hợp lệ, hệ thống xác nhận người dùng và cho phép họ tiếp tục sử dụng các chức năng cần đăng nhập.
Authorization là quá trình kiểm tra người dùng đã được xác thực có quyền thực hiện một hành động hoặc truy cập một tài nguyên cụ thể hay không.
Ví dụ: Trong một website quản lý nhân viên, nhân viên có thể xem thông tin cá nhân của mình nhưng không được phép xóa tài khoản của người khác. Trong khi đó, quản trị viên có thể được cấp quyền quản lý tài khoản theo quy định của hệ thống.
Nói đơn giản:
- Authentication: Bạn là ai?
- Authorization: Bạn được phép làm gì?

2. Authentication – Xác thực
2.1. Authentication hoạt động như thế nào?
Authentication thường được thực hiện khi người dùng đăng nhập hoặc khi hệ thống cần xác minh danh tính trước khi cho phép truy cập vào các tài nguyên được bảo vệ.
Quy trình cơ bản gồm các bước:
Bước 1: Người dùng cung cấp thông tin xác thực
Người dùng nhập email, mật khẩu hoặc sử dụng phương thức xác thực khác như mã OTP, sinh trắc học hay tài khoản của một nhà cung cấp đăng nhập bên ngoài.
Bước 2: Backend kiểm tra thông tin
Hệ thống kiểm tra thông tin được cung cấp dựa trên dữ liệu xác thực đã lưu hoặc thông qua dịch vụ xác thực phù hợp.
Bước 3: Xác định kết quả xác thực
Nếu thông tin hợp lệ, hệ thống xác nhận danh tính người dùng. Nếu thông tin không hợp lệ, hệ thống từ chối đăng nhập và trả về thông báo phù hợp.
Bước 4: Thiết lập trạng thái đăng nhập
Sau khi xác thực thành công, hệ thống có thể tạo Session hoặc cấp Token để nhận diện người dùng trong những Request tiếp theo.
2.2. Các phương thức Authentication phổ biến
- Username & Password: Người dùng đăng nhập bằng tên tài khoản hoặc email cùng mật khẩu.
- OTP (One-Time Password): Sử dụng mã xác thực dùng một lần, thường được gửi qua SMS, email hoặc ứng dụng xác thực.
- Multi-Factor Authentication : Kết hợp nhiều yếu tố xác thực để tăng mức độ bảo mật, chẳng hạn mật khẩu và mã xác thực từ ứng dụng.
- Biometric Authentication: Xác thực bằng đặc điểm sinh trắc học như vân tay hoặc khuôn mặt, tùy thiết bị và hệ thống hỗ trợ.
- OAuth 2.0 và OpenID Connect: Các tiêu chuẩn được sử dụng trong hệ thống đăng nhập và cấp quyền truy cập. OpenID Connect bổ sung khả năng xác thực danh tính trên nền OAuth 2.0.
2.3. Session và Token
Sau khi đăng nhập thành công, hệ thống cần có cơ chế nhận biết người dùng trong các Request tiếp theo. Hai phương thức thường gặp là Session-Based Authentication và Token-Based Authentication.
Session-Based Authentication là phương thức trong đó Server lưu trạng thái đăng nhập của người dùng. Client giữ Session ID và gửi lại trong những Request tiếp theo để Server xác định phiên đăng nhập tương ứng.
Token-Based Authentication sử dụng Token để chứng minh hoặc truyền tải thông tin xác thực theo cơ chế của hệ thống. Client gửi Token trong các Request cần xác thực, thường thông qua HTTP Authorization Header.
JWT là một định dạng Token phổ biến, có thể chứa các thông tin như định danh người dùng và thời hạn hiệu lực. Hệ thống cần kiểm tra chữ ký, thời hạn và các điều kiện cần thiết khi sử dụng JWT. Token cũng phải được bảo vệ để tránh bị đánh cắp hoặc sử dụng trái phép.
3. Authorization – Phân quyền
3.1. Authorization hoạt động như thế nào?
Sau khi xác thực danh tính, hệ thống cần kiểm tra quyền hạn của người dùng trước khi cho phép họ thực hiện các hành động được bảo vệ.
Quy trình cơ bản gồm:
Bước 1: Người dùng gửi Request
Người dùng yêu cầu thực hiện một chức năng như xem hồ sơ, chỉnh sửa thông tin hoặc xóa dữ liệu.
Bước 2: Backend xác định danh tính và quyền hạn
Hệ thống xác minh thông tin xác thực, sau đó kiểm tra vai trò, quyền được cấp và các điều kiện truy cập liên quan.
Bước 3: Quyết định cho phép hoặc từ chối
Nếu người dùng đáp ứng các điều kiện cần thiết, hệ thống cho phép thực hiện hành động. Nếu không đủ quyền, hệ thống từ chối Request.
Bước 4: Trả về kết quả
API trả về dữ liệu hoặc thông báo phù hợp tùy theo kết quả kiểm tra quyền truy cập.
3.2. Các mô hình Authorization phổ biến
Role-Based Access Control (RBAC)
RBAC là mô hình phân quyền dựa trên vai trò. Mỗi người dùng được gán một hoặc nhiều vai trò, và mỗi vai trò có các quyền tương ứng.
Ví dụ:
- Admin: Quản lý người dùng, cấu hình và các chức năng quản trị.
- Manager: Quản lý nhóm hoặc công việc trong phạm vi được cấp quyền.
- User: Sử dụng các chức năng thông thường của ứng dụng.
Attribute-Based Access Control
ABAC quyết định quyền truy cập dựa trên các thuộc tính của người dùng, tài nguyên, hành động và bối cảnh của Request.
Ví dụ: Nhân viên chỉ được xem tài liệu thuộc phòng ban của mình và đáp ứng các điều kiện truy cập do hệ thống quy định.
Permission-Based Access Control
Mô hình này tập trung vào các quyền cụ thể được cấp cho người dùng hoặc vai trò, chẳng hạn quyền xem, tạo, sửa hoặc xóa dữ liệu.
Trong thực tế, một hệ thống có thể kết hợp nhiều mô hình phân quyền để đáp ứng yêu cầu nghiệp vụ.
4. Authentication & Authorization trong REST API
Trong ứng dụng sử dụng REST API, Frontend gửi Request đến Backend để lấy dữ liệu hoặc thực hiện các thao tác. Backend chịu trách nhiệm xác thực danh tính và kiểm tra quyền truy cập trước khi xử lý những Request cần được bảo vệ.
Ví dụ, trong một website quản lý người dùng:
- Khi người dùng đăng nhập, API thực hiện Authentication để xác minh danh tính.
- Khi người dùng yêu cầu xem hồ sơ cá nhân, API kiểm tra thông tin xác thực và quyền truy cập.
- Khi người dùng muốn xóa tài khoản của người khác, API kiểm tra xem họ có quyền thực hiện thao tác đó hay không.
- Nếu người dùng chưa đăng nhập hoặc thông tin xác thực không hợp lệ, API thường trả về 401 Unauthorized.
- Nếu người dùng đã được xác thực nhưng không có quyền thực hiện hành động, API thường trả về 403 Forbidden.
Điểm quan trọng là việc ẩn nút chức năng trên Frontend không đủ để bảo vệ dữ liệu. Backend vẫn phải tự kiểm tra quyền trên mỗi Request phù hợp, vì người dùng có thể gửi Request trực tiếp mà không thông qua giao diện ứng dụng.
5. Sự khác nhau giữa Authentication và Authorization
Authentication tập trung vào việc xác minh danh tính. Authorization tập trung vào việc xác định phạm vi quyền hạn của danh tính đó.
Ví dụ: Một người đăng nhập thành công vào hệ thống quản lý có nghĩa là danh tính của họ đã được xác thực. Tuy nhiên, điều đó không đồng nghĩa họ có thể xem mọi dữ liệu hoặc sử dụng tất cả chức năng quản trị.
Hai cơ chế này thường hoạt động cùng nhau nhưng không thể thay thế cho nhau. Một hệ thống có thể xác thực người dùng chính xác nhưng vẫn không an toàn nếu không kiểm tra quyền truy cập vào dữ liệu và chức năng.
6. Các HTTP Status Code liên quan
Một số mã trạng thái HTTP thường được sử dụng khi xử lý Authentication và Authorization:
- 200 OK: Request được xử lý thành công.
- 201 Created: Tạo tài nguyên thành công.
- 400 Bad Request: Request không hợp lệ.
- 401 Unauthorized: Chưa xác thực hoặc thông tin xác thực không hợp lệ.
- 403 Forbidden: Đã xác thực nhưng không có quyền truy cập theo chính sách của hệ thống.
- 404 Not Found: Không tìm thấy tài nguyên. Một số hệ thống cũng có thể sử dụng mã này để tránh tiết lộ sự tồn tại của tài nguyên mà người dùng không được phép truy cập.
Việc lựa chọn Status Code cần phù hợp với ngữ nghĩa HTTP và được sử dụng nhất quán trong API.
7. Những nguyên tắc bảo mật cần lưu ý
7.1. Bảo vệ thông tin đăng nhập
Mật khẩu không nên được lưu dưới dạng văn bản thuần. Hệ thống cần sử dụng thuật toán băm mật khẩu chuyên dụng như Argon2id hoặc bcrypt cùng cấu hình phù hợp.
7.2. Bảo vệ Token và Session
Token và Session ID cần được bảo vệ để tránh bị đánh cắp. Tùy kiến trúc ứng dụng, hệ thống cần cấu hình thời hạn sử dụng, cơ chế hết hạn hoặc thu hồi và phương thức lưu trữ an toàn.
7.3. Luôn kiểm tra quyền tại Backend
Mọi thao tác cần được bảo vệ phải được kiểm tra quyền ở phía Server. Không nên chỉ dựa vào việc ẩn hoặc hiện các chức năng trên giao diện Frontend.
7.4. Áp dụng nguyên tắc quyền tối thiểu
Principle of Least Privilege là nguyên tắc chỉ cấp cho người dùng những quyền cần thiết để thực hiện công việc của họ. Điều này giúp hạn chế thiệt hại nếu tài khoản bị xâm phạm hoặc người dùng vô tình thực hiện thao tác không phù hợp.
7.5. Sử dụng HTTPS
HTTPS giúp mã hóa dữ liệu truyền giữa Client và Server, giảm nguy cơ thông tin đăng nhập hoặc Token bị đọc trộm trong quá trình truyền tải. Tuy nhiên, HTTPS không thay thế việc kiểm tra danh tính và quyền truy cập.
8. Mối quan hệ với các khái niệm khác
- API Validation: Kiểm tra dữ liệu đầu vào có hợp lệ hay không.
- API Error Handling: Xử lý lỗi và trả về phản hồi phù hợp khi xác thực hoặc phân quyền thất bại.
- REST API: Cung cấp giao diện để Client giao tiếp với Backend.
- JWT: Định dạng Token thường dùng để truyền tải thông tin xác thực.
- Session Management: Quản lý trạng thái đăng nhập của người dùng.
- RBAC: Phân quyền dựa trên vai trò.
- MFA: Tăng cường xác thực bằng nhiều yếu tố.
- HTTPS: Bảo vệ dữ liệu trong quá trình truyền tải.
9. Tóm lại
Authentication và Authorization là hai thành phần nền tảng trong bảo mật ứng dụng. Authentication giúp xác minh người dùng là ai, còn Authorization xác định người dùng được phép thực hiện những hành động nào.
Khi phát triển Backend hoặc REST API, cần kết hợp cả hai cơ chế, kiểm tra quyền tại Server, bảo vệ mật khẩu và Token, sử dụng HTTPS và áp dụng nguyên tắc cấp quyền tối thiểu. Triển khai đúng cách giúp bảo vệ dữ liệu, hạn chế truy cập trái phép và tăng độ an toàn cho toàn bộ hệ thống.
Các từ khóa cần ghi nhớ: Authentication, Authorization, Xác thực, Phân quyền, Session, Token, JWT, OAuth 2.0, OpenID Connect, MFA, RBAC, ABAC, HTTP Status Code, 401 Unauthorized, 403 Forbidden, HTTPS, Principle of Least Privilege.








Khoá học lập trình game con rắn cho trẻ em




