← Tài liệu
Bảo mật khi tích hợp NextX
Những gì NextX bảo đảm, và những gì hệ thống của bạn phải làm để dữ liệu workspace an toàn.
1. Chứng từ
client_secretcủa app (nxs_…) và API key (nxk_…) chỉ hiện một lần — mất là tạo lại, không ai xem lại được.- Token OAuth2 sống 3600 giây; trường refresh_token trả về luôn rỗng — hết hạn thì gọi lại endpoint lấy token.
- Mỗi workspace một token riêng (
workspace_idcủa workspace đã cài app). - Giữ secret/khóa trên máy chủ của bạn — không nhúng vào app di động, trang web chạy ở trình duyệt, kho mã hay log.
2. Scope tối thiểu
- Scope thực cấp = requested ∩ allowed (của app) ∩ granted (workspace consent) ∩ phân hệ workspace đang mua — gọi ngoài scope là
403(insufficient_scopeở route gateway chặn,Permission required: …ở route còn lại). - Gateway kiểm quyền theo từng endpoint; workspace tự chọn cấp scope nào khi cài app.
- Chỉ xin đúng scope cần — workspace dễ đồng ý hơn, lộ token thì thiệt hại nhỏ hơn.
3. Webhook có signature
X-NextX-Signature-256: sha256=<hex>=HMAC-SHA256(secret, {ts}.{raw_body})— tính trên raw body chưa parse JSON.- Từ chối nếu
X-NextX-Timestamplệch quá ~5 phút (chống replay). - Khử trùng theo
id(evt_…) — cùng một sự kiện có thể đến nhiều lần khi retry. - Secret webhook (
whsec_…, chuẩn Standard Webhooks; webhook cũ có thể cònwhk_sec_…) chỉ trả về một lần — lúc webhook của dịch vụ được tạo lần đầu (created: true) hoặc khi xoay secret — lưu kỹ. - Secret
whsec_…còn kèm header chuẩnwebhook-id·webhook-timestamp·webhook-signature— kiểm bằng thư việnstandardwebhookscó sẵn thay vì tự viết.
4. Đường truyền
- Chỉ HTTPS. URL webhook trỏ IP nội bộ/private bị chặn (SSRF guard) — chỉ nhận HTTPS công khai.
- Endpoint phải trả
2xxtrong 15 giây; lỗi/timeout thì giao tối đa 8 lần (7 lần retry trong ~24 giờ), lỗi liên tục thì tạm ngắt (circuit breaker). - Giới hạn mặc định 600 request/phút mỗi app — gặp
429thì đọcRetry-Afterrồi giãn nhịp.
5. Gửi lại an toàn (Idempotency-Key)
- Mọi thao tác ghi (
POST/PUT/PATCH) gọi bằng API key hoặc token ứng dụng nhận headerIdempotency-Key— tự sinh một mã (vd UUID) cho mỗi thao tác. - Mạng chập, gửi lại cùng mã trong 24 giờ ⇒ nhận lại đúng kết quả lần đầu (header
Idempotency-Replayed: true), không tạo bản ghi thứ hai. Lần đầu còn đang chạy ⇒409, đợi giây lát rồi gửi lại. - Cùng mã mà khác đường dẫn hoặc nội dung ⇒
422— đừng dùng lại mã cho thao tác khác. Lần đầu lỗi (không phải 2xx) thì mã được nhả, gửi lại sẽ chạy lại.
6. Xoay và thu hồi
- API key: thu hồi ở Cài đặt → API Keys & Webhooks — mất hiệu lực gần như ngay lập tức.
- Đổi khóa không gián đoạn: tạo khóa mới, đối tác chuyển xong rồi mới thu hồi khóa cũ.
- Xoay secret webhook giữ secret cũ còn hiệu lực 7 ngày: trong thời gian đó NextX gửi
X-NextX-Signature-256(secret mới) kèmX-NextX-Signature-256-Previous(secret cũ) — chấp nhận một trong hai, rồi bỏ secret cũ.
7. Báo lỗ hổng
- Gửi mô tả + cách tái hiện tới support@nextx.vn, tiêu đề bắt đầu bằng [Bảo mật]. Vui lòng không công bố trước khi NextX xác nhận đã vá.
- Chỉ thử trên sandbox
https://api-dev.nextx.vn— không thử trên dữ liệu khách thật.
Danh sách kiểm trước khi lên thật
☐ Secret/khóa nằm trong kho secret — không trong mã nguồn, không in ra log
☐ Chỉ xin đúng scope cần
☐ Verify signature + timestamp mọi webhook, khử trùng theo id, trả 2xx trong 15 giây
☐ Trong lúc xoay secret: chấp nhận signature mới HOẶC Previous
☐ Mọi thao tác ghi gửi Idempotency-Key riêng; gửi lại khi mạng chập thì dùng lại đúng mã đó
☐ Xử lý 401 (token/khóa hết hạn, thu hồi) · 403 (thiếu scope) · 429 (đợi Retry-After)
☐ Đã chạy thử trọn luồng trên sandbox https://api-dev.nextx.vnCâu hỏi tích hợp thông thường cũng gửi support@nextx.vn.