Authentication & Authorization là gì?

Authentication (xác thực) và Authorization (phân quyền) là hai khái niệm quan trọng trong bảo mật hệ thống và API.

Nói một cách đơn giản:

  • Authentication: Xác minh bạn là ai.
  • Authorization: Xác định bạn được phép làm gì.

Ví dụ, khi đăng nhập vào một hệ thống quản lý sản phẩm, Authentication giúp hệ thống xác minh danh tính của bạn. Sau đó, Authorization xác định bạn có được phép xem, thêm, sửa hoặc xóa sản phẩm hay không.

1. Authentication là gì?

Authentication là quá trình xác minh danh tính của một người dùng hoặc một hệ thống khi họ muốn truy cập vào một dịch vụ. Quá trình này giúp hệ thống xác định đối tượng đang gửi request có phải là đối tượng mà họ tuyên bố hay không.

Một số phương thức xác thực phổ biến gồm:

  • Tên người dùng và mật khẩu.
  • Mã xác minh một lần (OTP).
  • Sinh trắc học như dấu vân tay hoặc khuôn mặt.
  • Token hoặc chứng chỉ số trong các hệ thống phù hợp.

Các yếu tố xác thực (Authentication Factors)

Các yếu tố xác thực thường được chia thành ba nhóm:

  • Something you know: Thứ bạn biết, chẳng hạn mật khẩu hoặc mã PIN.
  • Something you have: Thứ bạn sở hữu, chẳng hạn thiết bị bảo mật hoặc khóa xác thực.
  • Something you are: Đặc điểm sinh trắc học, chẳng hạn dấu vân tay.

Dựa trên số lượng yếu tố xác thực độc lập được sử dụng, có thể chia thành các hình thức sau:

Single-Factor Authentication (SFA)

Sử dụng một yếu tố xác thực để xác minh danh tính. Ví dụ, người dùng đăng nhập bằng tên tài khoản và mật khẩu. Cả hai đều thuộc nhóm “thứ bạn biết”, nên vẫn chỉ được tính là một yếu tố.

Two-Factor Authentication (2FA)

Sử dụng hai yếu tố xác thực thuộc hai nhóm khác nhau. Ví dụ, người dùng nhập mật khẩu và xác nhận đăng nhập bằng một thiết bị bảo mật.

Multi-Factor Authentication (MFA)

Sử dụng từ hai yếu tố xác thực độc lập trở lên. 2FA là một trường hợp cụ thể của MFA. Việc kết hợp nhiều yếu tố có thể tăng cường bảo mật so với chỉ sử dụng một yếu tố.

Ví dụ: Khi sử dụng thẻ ATM, người dùng cần có thẻ và nhập mã PIN. Trong trường hợp này, thẻ thuộc nhóm “thứ bạn sở hữu”, còn PIN thuộc nhóm “thứ bạn biết”.

2. Authorization là gì?

Authorization là quá trình xác định một người dùng hoặc một hệ thống có được phép truy cập tài nguyên hoặc thực hiện một hành động cụ thể hay không.

Quá trình này thường dựa trên các thông tin như vai trò, quyền hạn, chính sách bảo mật hoặc quyền sở hữu tài nguyên.

Ví dụ, trong một hệ thống quản lý sản phẩm:

  • User có thể xem danh sách sản phẩm.
  • Nhân viên quản lý có thể thêm và chỉnh sửa sản phẩm.
  • Admin có thể được phép xóa sản phẩm và quản lý tài khoản.

Việc một người đăng nhập thành công không có nghĩa là họ được phép thực hiện mọi thao tác. Hệ thống vẫn cần kiểm tra quyền tương ứng với từng tài nguyên và hành động.

Một số mô hình phân quyền phổ biến:

  • Role-Based Access Control (RBAC): Phân quyền dựa trên vai trò, chẳng hạn User, Manager hoặc Admin.
  • Attribute-Based Access Control (ABAC): Phân quyền dựa trên các thuộc tính như vai trò, phòng ban, tài nguyên và ngữ cảnh truy cập.

3. Phân biệt Authentication và Authorization

Tiêu chí Authentication Authorization
Mục đích Xác minh danh tính Kiểm tra quyền truy cập
Câu hỏi chính Bạn là ai? Bạn được phép làm gì?
Cơ sở kiểm tra Thông tin hoặc bằng chứng xác thực Vai trò, quyền hạn, chính sách và thuộc tính
Ví dụ Đăng nhập bằng thông tin xác thực hợp lệ Kiểm tra User có quyền xóa sản phẩm hay không
Kết quả Danh tính được xác minh hoặc không Hành động được cho phép hoặc bị từ chối

4. Authentication và Authorization trong API hoạt động như thế nào?

Xét trường hợp client gửi request để xóa sản phẩm thông qua endpoint DELETE /api/products/123.

Bước 1: Client gửi request

Client gửi request đến API, thường kèm access token trong header Authorization nếu endpoint yêu cầu xác thực.

Bước 2: Authentication — Xác thực

Server kiểm tra thông tin xác thực và xác minh danh tính của người gửi request.

Nếu thiếu thông tin xác thực hoặc token không hợp lệ, API thường trả về 401 Unauthorized.

Ví dụ:

HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
  "error": "invalid_token",
  "message": "Authentication failed"
}

Bước 3: Authorization — Phân quyền

Sau khi xác thực thành công, server kiểm tra người dùng có quyền xóa sản phẩm này hay không.

Nếu người dùng đã được xác thực nhưng không có quyền thực hiện thao tác, API thường trả về 403 Forbidden.

HTTP/1.1 403 Forbidden
Content-Type: application/json
{
  "error": "insufficient_permissions",
  "message": "You do not have permission to delete this product"
}

Bước 4: Thực hiện thao tác

Nếu request vượt qua các bước kiểm tra cần thiết, server tiếp tục xử lý yêu cầu xóa sản phẩm và trả về kết quả phù hợp.

Lưu ý: Đây là luồng minh họa phổ biến cho một endpoint được bảo vệ. Thứ tự xử lý và định dạng lỗi thực tế có thể khác nhau tùy thiết kế API. Một số hệ thống cũng có thể trả 404 Not Found thay vì 403 Forbidden để tránh tiết lộ sự tồn tại của tài nguyên.

5. Kết luận

Authentication và Authorization là hai cơ chế khác nhau nhưng bổ trợ cho nhau trong bảo mật hệ thống.

Authentication xác minh danh tính của người dùng hoặc client, trong khi Authorization xác định họ được phép truy cập tài nguyên và thực hiện hành động nào.

Trong API, việc kết hợp hai cơ chế này giúp hệ thống không chỉ xác minh ai đang gửi request mà còn kiểm soát những gì họ có thể làm. Tuy nhiên, bảo mật API còn cần các biện pháp khác như kiểm tra dữ liệu đầu vào, bảo vệ thông tin nhạy cảm và xử lý lỗi phù hợp.

Nguồn tham khảo

Bài viết khác

PHP & Laravel Fundamentals

PHP là gì? — Ngôn ngữ lập trình phía máy chủ và vai trò trong phát triển web PHP là gì?   PHP (viết tắt của PHP: Hypertext Preprocessor) là một ngôn ngữ lập trình phía máy chủ, thường được sử dụng để xây dựng website và ứng dụng web động. Trong mô hình phát […]

OpenAPI / Swagger

1. OpenAPI và Swagger là gì? Khi xây dựng backend bằng Go và Gin, developer thường định nghĩa các endpoint như GET /users, POST /users hoặc GET /users/{id}. Tuy nhiên, việc có endpoint hoạt động không đồng nghĩa với việc người khác biết cách sử dụng chúng. OpenAPI là gì? OpenAPI Specification (OAS) là một […]

Gin-Gonic Fundamentals

1. Gin-Gonic là gì? Gin, thường được gọi là Gin-Gonic, là một HTTP web framework viết bằng Go. Framework này cung cấp các công cụ để xây dựng web server và REST API mà không cần tự triển khai toàn bộ việc định tuyến request, đọc dữ liệu HTTP, tạo response hay quản lý middleware. […]

Test Case & Test Plan & Test Data

1. Lời mở đầu và vị trí nền tảng của bộ ba quản lý kiểm thử trong dự án phần mềm Trong quy trình sản xuất phần mềm hiện đại, nếu hoạt động lập trình (Coding) là việc hiện thực hóa các ý tưởng thiết kế thành sản phẩm chạy được, thì hoạt động kiểm […]

JWT & Token Authentication

Token Authentication, JWT, Access Token và Refresh Token 1. Token Authentication là gì?   Token Authentication là cơ chế xác thực sử dụng token để chứng minh danh tính hoặc thông tin xác thực của người dùng hay client khi truy cập các tài nguyên được bảo vệ. Sau khi người dùng đăng nhập thành […]

Series 3 – JavaScript Fundamentals : JavaScript → DOM

Series 3 — JavaScript Fundamentals   JavaScript → DOM → Async → API   Bài 1. JavaScript & DOM – Từ ngôn ngữ lập trình đến tương tác với giao diện Web   1. JavaScript là gì? Trong quá trình xây dựng website, HTML được sử dụng để tạo cấu trúc nội dung, CSS đảm nhiệm việc […]

Leave a Reply

Your email address will not be published. Required fields are marked *