Định danh & Bảo mật
Nền tảng VENI-AI triển khai một Kiến trúc Định danh Hỗn hợp (Hybrid Identity Architecture) tinh vi, kết hợp xác thực đa phương thức OIDC với hệ thống Phân quyền dựa trên Vai trò (RBAC) vận hành bởi Casbin.
1. Xác thực (OIDC)
Shell API đóng vai trò là Trung tâm Định danh (Identity Hub). Hệ thống hỗ trợ xác thực local bằng bcrypt và các nhà cung cấp bên ngoài như Keycloak và Google.
RS256 & JWKS
Tất cả JWT được cấp bởi Shell đều được ký bằng khóa riêng RSA-256.
- Khóa riêng:
APP_ENV_JWT_PRIVATE_KEY - JWKS Công khai: Được công khai tại
/api/.well-known/jwks.json
XÁC THỰC VỆ TINH
Các ứng dụng vệ tinh (Drive, HRM,...) KHÔNG chia sẻ secret với Shell. Chúng tải các khóa công khai của Shell thông qua endpoint JWKS để tự xác thực tính toàn vẹn của token một cách độc lập.
Luồng Xác thực
2. Phân quyền (Casbin)
Việc phân quyền được quản lý thông qua Casbin, một thư viện kiểm soát truy cập mạnh mẽ hỗ trợ nhiều mô hình khác nhau.
Logic So khớp (Matcher)
Chúng tôi sử dụng mô hình RBAC chuẩn với hỗ trợ domain: m = g(r.sub, p.sub) && keyMatch(r.obj, p.obj) && keyMatch(r.act, p.act)
Phân cấp
- System Admin: Được gán vai trò
system-admintoàn cục (không cóorganizationId). Cho phép truy cập tất cả tài nguyên bằng ký tự đại diện*. - Organization Admin: Được gán vai trò
org-admingiới hạn trong mộtorganizationId. Cho phép truy cập mọi tài nguyên trong tổ chức đó. - Member: Các quyền hạn chi tiết (ví dụ:
drive:files:read) trong phạm vi một tổ chức.
3. Tăng cường Bảo mật
Danh sách đen Token (Blacklisting)
Khi người dùng đăng xuất, JWT của họ sẽ được băm (SHA-256) và lưu vào Redis cho đến khi hết hạn. Mỗi yêu cầu kiểm tra đều bao gồm bước xác minh CacheService.exists(blacklistKey).
Policy Caching
Các chính sách Casbin tốn nhiều tài nguyên để tính toán từ DB. CasbinAdapter lưu trữ các dòng chính sách đã biên dịch vào Redis với thời gian sống (TTL) 5 phút, và tự động xóa cache khi có bất kỳ thay đổi quyền hạn nào.
Giới hạn Tốc độ (Rate Limiting)
Các giới hạn nghiêm ngặt được áp dụng cho các endpoint nhạy cảm:
- Đăng nhập/Đăng ký: 10 yêu cầu / phút.
- Làm mới Token: 5 yêu cầu / phút.