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ò.

Email này cũng là chữ ký trên bộ nhớ quyết định: answered_by của câu hỏi và decided_by của quyết định do Worker đóng dấu từ JWT, không nhận từ body — xem Quyết định.

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 đó.