Giao diện
Xác thực
API tin vào Cloudflare Access, không tự quản lý mật khẩu.
Luồng
- Người dùng mở
compass.conan1.com. Cloudflare Access chặn lại và yêu cầu đăng nhập. - Sau khi qua, Access đặt cookie
CF_Authorizationcho toàn bộconan1.com. - Frontend gọi API bằng
fetch(..., { credentials: 'include' }), cookie đi kèm. - Access đứng trước Worker cũng gắn header
Cf-Access-Jwt-Assertion. - Worker xác minh JWT bằng JWKS của team (
https://<team>.cloudflareaccess.com/cdn-cgi/access/certs), kiểm tra chữ ký RS256, hạnexp,iss, vàaud. - Lấy
emailtrong JWT, tra bảngusersđể biết vai trò.
Người chưa được cấp vai trò
Ai qua được Access nhưng chưa có trong bảng users sẽ được coi là viewer: đọc được, không ghi được. Đây là chủ ý — Access quyết định ai vào được, bảng users quyết định họ làm được gì.
Thêm người dùng mới:
sql
INSERT INTO users (email, name, role, brand_id)
VALUES ('nguoi@vidu.com', 'Tên', 'brand_owner', 'BRD-nemo12');Cache JWKS
Worker cache bộ khoá công khai trong bộ nhớ 1 giờ. Cloudflare xoay khoá định kỳ; TTL này đủ ngắn để bắt kịp và đủ dài để không gọi lại mỗi request.
Chạy local
Local không có Access. Đặt trong api.conan1.com/.dev.vars:
DEV_BYPASS_EMAIL="dac2205@gmail.com"Worker sẽ coi mọi request là của email đó.
DANGER
DEV_BYPASS_EMAIL chỉ dành cho máy cá nhân. Nếu biến này có giá trị trên production, bất kỳ ai gọi được API đều trở thành người dùng đó.