Chào mừng bạn đến với bài hướng dẫn của HolySheep AI! Trong bài viết này, chúng ta sẽ cùng nhau khám phá cách quản lý API Key theo mô hình đa thuê (Multi-Tenant) — một khái niệm quan trọng dành cho những ai đang xây dựng nền tảng cung cấp dịch vụ AI cho nhiều khách hàng cùng lúc.

Nếu bạn là người mới bắt đầu và chưa từng làm việc với API, đừng lo lắng! Bài hướng dẫn này được viết riêng cho người hoàn toàn không có kinh nghiệm. Chúng ta sẽ đi từ những khái niệm cơ bản nhất cho đến cách triển khai thực tế.

API Key Là Gì? Tại Sao Cần Quản Lý Nó?

Hãy tưởng tượng API Key như một "chìa khóa thông minh" cho ngôi nhà của bạn. Khi bạn muốn cho khách vào nhà, bạn có thể trao cho họ một chiếc chìa khóa riêng. Chiếc chìa này chỉ có thể mở cửa nhà bạn, không thể mở nhà hàng xóm. Tương tự, API Key là một chuỗi ký tự đặc biệt dùng để xác thực và cho phép một ứng dụng truy cập vào dịch vụ API.

Vai trò của API Key trong thế giới AI

Khi bạn sử dụng dịch vụ AI như HolySheep AI, mỗi tài khoản sẽ có một API Key riêng. API Key này giống như "thẻ căn cước" của bạn khi giao tiếp với máy chủ AI. Nó giúp:

Gợi ý ảnh: Chụp màn hình giao diện HolySheep AI Dashboard, highlight vị trí API Key trong phần cài đặt tài khoản.

Multi-Tenant Là Gì? Hiểu Đơn Giản Như Ăn Bánh

"Multi-Tenant" nghe có vẻ phức tạp, nhưng thực ra rất dễ hiểu! Hãy tưởng tượng bạn sở hữu một tòa chung cư.

So sánh Single-Tenant vs Multi-Tenant

Single-Tenant giống như mỗi căn hộ trong chung cư đều có hệ thống điện, nước, internet riêng hoàn toàn. Mỗi căn hộ là một "thế giới" riêng biệt.

Multi-Tenant giống như tất cả căn hộ trong tòa nhà dùng chung một hệ thống điện, nước, internet trung tâm. Mỗi căn hộ vẫn có đồng hồ riêng để tính phí, nhưng hạ tầng thì dùng chung. Điều này giúp tiết kiệm chi phí vận hành rất nhiều!

Trong lĩnh vực công nghệ, khi bạn xây dựng một nền tảng AI cung cấp dịch vụ cho nhiều doanh nghiệp (tenant) cùng lúc, bạn đang triển khai mô hình Multi-Tenant. Mỗi doanh nghiệp là một "tenant", và họ đều dùng chung hạ tầng API của bạn nhưng với dữ liệu và quyền hạn được phân tách rõ ràng.

Tại sao nên sử dụng HolySheep AI?

HolySheep AI là nền tảng API AI đa thuê với chi phí cực kỳ cạnh tranh. Với tỷ giá chỉ ¥1=$1, bạn tiết kiệm được 85%+ so với các nhà cung cấp khác. Hệ thống hỗ trợ WeChat và Alipay thanh toán, thời gian phản hồi dưới 50ms, và bạn nhận được tín dụng miễn phí ngay khi đăng ký.

Kiến Trúc Phân Quyền API Key — Từ A Đến Z

Bước 1: Tạo Cấu Trúc Phân Cấp Quyền

Trước khi bắt đầu code, chúng ta cần thiết kế cấu trúc phân quyền. Dưới đây là mô hình 3 cấp độ quyền phổ biến nhất:

Gợi ý ảnh: Vẽ sơ đồ cây phân cấp quyền với 3 level để độc giả dễ hình dung.

Bước 2: Thiết Kế Database Cho Multi-Tenant

Bạn cần lưu trữ thông tin về các tenant và API key của họ. Dưới đây là cấu trúc bảng đơn giản sử dụng SQLite (phù hợp cho người mới bắt đầu):

-- Bảng lưu thông tin tenant (người thuê)
CREATE TABLE tenants (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    plan_type TEXT DEFAULT 'free',  -- free, basic, pro, enterprise
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Bảng lưu API Keys
CREATE TABLE api_keys (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    tenant_id INTEGER NOT NULL,
    key_hash TEXT UNIQUE NOT NULL,  -- Lưu hash thay vì key thật
    key_prefix TEXT NOT NULL,        -- 8 ký tự đầu để hiển thị
    permission_level TEXT DEFAULT 'developer',
    rate_limit INTEGER DEFAULT 100,  -- Số request/phút
    is_active BOOLEAN DEFAULT 1,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (tenant_id) REFERENCES tenants(id)
);

-- Bảng lưu quyền chi tiết
CREATE TABLE key_permissions (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    api_key_id INTEGER NOT NULL,
    resource TEXT NOT NULL,          -- models, embeddings, files...
    can_read BOOLEAN DEFAULT 1,
    can_write BOOLEAN DEFAULT 0,
    FOREIGN KEY (api_key_id) REFERENCES api_keys(id)
);

Giải thích: Chúng ta lưu key_hash thay vì API key thật để bảo mật. Ngay cả khi database bị lộ, kẻ tấn công cũng không thể sử dụng được API key.

Bước 3: Tạo API Key Với HolySheep AI

Đầu tiên, hãy đăng ký tài khoản tại HolySheep AI và tạo API Key đầu tiên của bạn. Dưới đây là code Python để quản lý API Key của riêng bạn:

import hashlib
import secrets
import sqlite3
from datetime import datetime

def generate_api_key():
    """Tạo một API key ngẫu nhiên an toàn"""
    # Tạo 32 bytes ngẫu nhiên và chuyển thành chuỗi hex
    random_bytes = secrets.token_bytes(32)
    api_key = f"hsa_{random_bytes.hex()}"
    return api_key

def hash_api_key(api_key):
    """Băm API key để lưu vào database (không lưu key thật)"""
    return hashlib.sha256(api_key.encode()).hexdigest()

def create_tenant_and_key(db_path, tenant_name, tenant_email, permission_level='developer'):
    """Tạo tenant mới và API key cho họ"""
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    
    try:
        # Tạo tenant
        cursor.execute(
            "INSERT INTO tenants (name, email) VALUES (?, ?)",
            (tenant_name, tenant_email)
        )
        tenant_id = cursor.lastrowid
        
        # Tạo API key
        api_key = generate_api_key()
        key_hash = hash_api_key(api_key)
        key_prefix = api_key[:12]  # Lấy 12 ký tự đầu làm prefix
        
        cursor.execute(
            """INSERT INTO api_keys 
               (tenant_id, key_hash, key_prefix, permission_level, rate_limit) 
               VALUES (?, ?, ?, ?, ?)""",
            (tenant_id, key_hash, key_prefix, permission_level, 100)
        )
        
        conn.commit()
        
        print(f"✅ Đã tạo tenant '{tenant_name}' với API Key:")
        print(f"   Key thật (chỉ hiển thị 1 lần): {api_key}")
        print(f"   Key prefix (để nhận biết): {key_prefix}")
        print(f"   Quyền hạn: {permission_level}")
        
        return api_key, tenant_id
        
    except Exception as e:
        conn.rollback()
        print(f"❌ Lỗi: {e}")
        return None, None
    finally:
        conn.close()

Ví dụ sử dụng

db_path = "holysheep_multitenant.db" api_key, tenant_id = create_tenant_and_key( db_path, "Công Ty ABC", "[email protected]", permission_level="manager" )

Gợi ý ảnh: Chụp màn hình kết quả chạy code trên terminal, highlight API key được tạo ra.

Bước 4: Xác Thực Và Phân Quyền Request

Bây giờ chúng ta sẽ viết code để xác thực API Key và phân quyền cho từng request. Đây là phần quan trọng nhất của hệ thống!

import sqlite3
import hashlib
from functools import wraps
from flask import Flask, request, jsonify, g

app = Flask(__name__)
DB_PATH = "holysheep_multitenant.db"

def verify_api_key(f):
    """Decorator để xác thực API key cho mỗi endpoint"""
    @wraps(f)
    def decorated_function(*args, **kwargs):
        # Lấy API key từ header
        api_key = request.headers.get('Authorization', '').replace('Bearer ', '')
        
        if not api_key:
            return jsonify({"error": "Thiếu API Key"}), 401
        
        # Băm API key để so sánh với database
        key_hash = hashlib.sha256(api_key.encode()).hexdigest()
        
        conn = sqlite3.connect(DB_PATH)
        cursor = conn.cursor()
        
        # Tìm key trong database
        cursor.execute("""
            SELECT ak.id, ak.tenant_id, ak.permission_level, 
                   ak.rate_limit, ak.is_active, t.plan_type, t.name
            FROM api_keys ak
            JOIN tenants t ON ak.tenant_id = t.id
            WHERE ak.key_hash = ?
        """, (key_hash,))
        
        result = cursor.fetchone()
        conn.close()
        
        if not result:
            return jsonify({"error": "API Key không hợp lệ"}), 401
        
        key_id, tenant_id, permission, rate_limit, is_active, plan, tenant_name = result
        
        if not is_active:
            return jsonify({"error": "API Key đã bị vô hiệu hóa"}), 403
        
        # Lưu thông tin vào context của request
        g.key_id = key_id
        g.tenant_id = tenant_id
        g.permission = permission
        g.rate_limit = rate_limit
        g.plan = plan
        g.tenant_name = tenant_name
        
        return f(*args, **kwargs)
    
    return decorated_function

def require_permission(required_permission):
    """Decorator kiểm tra quyền cụ thể"""
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            # Kiểm tra cấp độ quyền
            permission_hierarchy = {
                'admin': 3,
                'manager': 2,
                'developer': 1
            }
            
            user_level = permission_hierarchy.get