Skip to content

Xác thực

API tin vào Cloudflare Access, không tự quản lý mật khẩu.

Luồng

  1. Người dùng mở compass.conan1.com. Cloudflare Access chặn lại và yêu cầu đăng nhập.
  2. Sau khi qua, Access đặt cookie CF_Authorization cho toàn bộ conan1.com.
  3. Frontend gọi API bằng fetch(..., { credentials: 'include' }), cookie đi kèm.
  4. Access đứng trước Worker cũng gắn header Cf-Access-Jwt-Assertion.
  5. 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ạn exp, iss, và aud.
  6. Lấy email trong JWT, tra bảng users để 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 đó.