Ý chính: Token hợp lệ chỉ cho biết ai đang gọi. Nó không chứng minh người đó được phép thực hiện mọi thao tác.
Thuật ngữ trong bài: Authentication: xác minh danh tính; authorization: kiểm tra quyền; webhook: thông báo do hệ thống khác gửi tới API.
Bài toán thực tế
Khóa API dài hạn có thể bị lộ. Người dùng đã đăng nhập vẫn có thể đổi mã tài nguyên để truy cập dữ liệu khác. Webhook cũng có thể bị giả mạo hoặc phát lại nếu hệ thống chỉ tin vào nội dung nhận được.
Một token hợp lệ chứng minh danh tính nhưng không chứng minh quyền trên mọi tài nguyên. API phải kiểm tra quyền theo đối tượng, phạm vi và trạng thái hiện tại ở mỗi thao tác nhạy cảm.
Webhook còn cần xác minh chữ ký, thời gian gửi và mã chống phát lại. Tin tưởng kết nối HTTPS hoặc một khóa dùng lâu dài là chưa đủ.
Thiết kế và triển khai
- Kiểm tra bên phát hành, đối tượng nhận, thuật toán, thời hạn và trạng thái khóa của mọi token.
- Phân quyền đồng thời theo hành động, khách hàng và tài nguyên tại ranh giới phía máy chủ.
- Ký webhook trên đúng chuỗi byte gốc, kèm thời gian gửi, mã chống phát lại và quy trình xoay bí mật.
Mã minh họa: Xác minh đầy đủ một webhook
signed = timestamp + '.' + rawBody
expected = HMAC(activeSecret, signed)
reject unless constantTimeEqual(signature, expected)
reject if abs(now - timestamp) > 5 minutes
reject if deliveryId already processedKhi xoay bí mật, chấp nhận khóa hiện tại và khóa kế tiếp trong một khoảng ngắn; ghi nhận khóa đã xác minh nhưng không ghi bí mật hay dữ liệu nhạy cảm.
Rủi ro cần tính trước
- Gateway kiểm tra token nhưng dịch vụ bên trong lại tin một header danh tính có thể bị giả mạo.
- Đồng hồ lệch giữa hai hệ thống làm webhook hợp lệ bị từ chối.
- Thông tin xác thực đã thu hồi vẫn được chấp nhận vì cache giữ quá lâu.
Nên theo dõi gì?
| Tín hiệu | Điều tín hiệu cho biết |
|---|---|
| Quyết định từ chối theo từng nguyên nhân chính sách | Phân biệt tấn công, lỗi ứng dụng khách và lỗi hồi quy trong chính sách. |
| Tuổi thông tin xác thực và trạng thái xoay vòng | Phát hiện quyền truy cập tồn tại quá lâu hoặc không còn người phụ trách. |
| Lỗi chữ ký và số lần webhook bị phát lại | Phân biệt lỗi tích hợp thông thường với hành vi lạm dụng chủ động. |
Đưa vào production từng bước
Kiểm kê thông tin xác thực và các điểm kiểm tra quyền trước. Ghi lại quyết định phân quyền mà chưa đổi kết quả, chuyển từng nhóm API sang chính sách dùng chung, sau đó rút ngắn tuổi token và diễn tập xoay khóa khẩn cấp trước khi bật bắt buộc toàn hệ thống.
Điều cần nhớ
Bảo mật API là quá trình liên tục thu hẹp quyền và kiểm chứng từng thao tác, không phải một cổng đăng nhập đặt ở đầu hệ thống.
