Authentication và Authorization trong API
Bảo mật API là yêu cầu quan trọng khi xây dựng hệ thống thực tế. Bài học này sẽ giúp bạn cấu hình Authentication (xác thực) và Authorization (phân quyền) cho API trong Laminas, sử dụng HTTP Basic Auth hoặc OAuth2, và kiểm soát truy cập bằng ACL (Access Control List) hoặc RBAC (Role-Based Access Control).
Mục tiêu
- Hiểu các cơ chế xác thực API trong Laminas API Tools.
- Cấu hình Basic Authentication.
- Phân quyền truy cập dựa trên role với ACL hoặc RBAC.
- Áp dụng bảo mật vào module
Api
.

1. Giới thiệu các cơ chế xác thực
- HTTP Basic Authentication: đơn giản, dễ cấu hình, thường dùng trong môi trường kiểm thử.
- OAuth2: phức tạp hơn, thích hợp cho các hệ thống có nhiều client như mobile/web.
Trong bài này ta sẽ tập trung vào HTTP Basic Auth để giúp học viên nắm vững quy trình bảo mật.
2. Cấu hình HTTP Basic Auth
Bước 1: Kích hoạt Laminas\ApiTools\Authentication
Trong application.config.php
hoặc modules.config.php
:
return [
'Laminas\ApiTools\Authentication',
// ...
];
Bước 2: Cấu hình adapter
Trong config/autoload/authentication.global.php
(tạo nếu chưa có):
return [
'authentication' => [
'adapters' => [
'basic' => [
'adapter' => 'Laminas\\ApiTools\\Authentication\\Adapter\\Basic',
'options' => [
'users' => [
'admin' => 'admin123',
'editor' => 'editor123',
],
],
],
],
],
];
Tài khoản và mật khẩu ở đây là ví dụ. Trong thực tế, bạn nên tích hợp xác thực từ DB.
Bước 3: Gán xác thực cho REST resource
Trong module.config.php
:
'api-tools-authentication' => [
'map' => [
'Api\\V1\\Rest\\Post\\Controller' => 'basic',
],
],
3. Thiết lập Authorization với ACL / RBAC
Cấu hình ACL cơ bản
Trong module.config.php
:
'api-tools-authorization' => [
'Api\\V1\\Rest\\Post\\Controller' => [
'collection' => [
'GET' => true,
'POST' => 'role_admin',
],
'entity' => [
'GET' => true,
'PUT' => 'role_editor',
'DELETE' => 'role_admin',
],
],
],
Bạn cần ánh xạ người dùng với role, ví dụ:
admin
→role_admin
.
4. Kiểm thử
Dùng Postman:
-
Gửi request đến
/api/posts
kèm header:Authorization: Basic base64(admin:admin123)
-
Kiểm tra khi không có thông tin xác thực → bị từ chối (401).
-
Kiểm tra khi có thông tin xác thực → truy cập được đúng quyền hạn.
Bài tập thực hành
-
Kích hoạt
Laminas\ApiTools\Authentication
. -
Cấu hình Basic Auth với 2 người dùng:
admin
,editor
. -
Gán module
Api
sử dụng adapterbasic
. -
Thiết lập quyền:
-
admin
: có quyềnGET
,POST
,PUT
,DELETE
. -
editor
: chỉ có quyềnGET
,PUT
.
-
-
Gửi thử các request từ Postman và xác minh kết quả.
Kết luận
- Bạn đã biết cách thiết lập Authentication cho API sử dụng Basic Auth.
- Hệ thống phân quyền (Authorization) giúp giới hạn quyền truy cập đến từng phương thức API.
- Bài học này là nền tảng để bạn có thể mở rộng bảo mật với OAuth2 hoặc JWT trong các dự án phức tạp hơn.

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.
Xem thêm

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.
Liên hệ công việc qua email dưới đây.
lhvuctu@gmail.com