Giải quyết vấn đề xác thực MCP ở quy mô lớn
Bạn đã xây dựng một MCP server. Nó hoạt động tốt trên laptop của bạn. Trợ lý AI của bạn có thể tạo ticket Jira và truy vấn cơ sở dữ liệu. Mọi thứ đều tuyệt vời cho đến khi một đồng nghiệp muốn sử dụng nó.
Nếu bạn muốn bán MCP của mình như một sản phẩm, bạn sẽ đối mặt với một vấn đề mới. Bạn phải hỗ trợ nhiều người dùng. Mỗi người dùng cần có API key riêng và quyền truy cập bảo mật.
Hầu hết các nhà phát triển đều thất bại ở bước này. Họ thường thử hai cách tiếp cận sai lầm.
Cách thứ nhất là thiết lập thủ công. Bạn yêu cầu người dùng clone repo, cài đặt các dependency và thiết lập các key môi trường cục bộ. Việc này mất hàng giờ đồng hồ. Hầu hết người dùng sẽ bỏ cuộc trước khi hoàn tất.
Cách thứ hai là "cơn ác mộng serverless". Bạn triển khai lên Cloud Run hoặc Vercel. Vì các nền tảng serverless không lưu trữ session, mỗi request sẽ chạm đến một instance mới. Người dùng của bạn sẽ bị kẹt trong một vòng lặp. Họ xác thực xong, nhưng cú click tiếp theo lại yêu cầu họ xác thực lại từ đầu. Đây không phải là một sản phẩm. Đây chỉ là một bản prototype lỗi.
Chúng tôi đã giải quyết vấn đề này tại BrainGrid. Chúng tôi đã chuyển đổi từ một công cụ cục bộ sang cơ sở hạ tầng sẵn sàng cho môi trường production. Dưới đây là cách chúng tôi đã thực hiện.
- Sử dụng Redis Session Store: Các instance serverless sẽ bị hủy và khởi động lại. Bạn không thể lưu trữ session trong bộ nhớ (memory). Hãy sử dụng Redis để giữ cho dữ liệu session luôn tồn tại trên tất cả các instance.
- Triển khai Multi-Tier Caching: Kiểm tra bộ nhớ cục bộ trước. Nếu không có, hãy kiểm tra Redis. Điều này giúp tránh việc phải thực hiện xác thực JWT tốn kém trên mỗi request.
- Mã hóa dữ liệu nhạy cảm: Sử dụng AES-256-GCM để mã hóa dữ liệu session trước khi đưa vào Redis. Điều này giúp giữ an toàn cho thông tin người dùng.
- Sử dụng các pattern OAuth phù hợp: Các MCP client mong đợi các luồng discovery cụ thể. Bạn phải định dạng các header
WWW-Authenticatemột cách chính xác để tránh lỗi. - Tối ưu hóa tốc độ: Việc xác thực JWT làm tăng độ trễ (latency). Bằng cách cache các session đã được xác thực, chúng tôi đã giảm đáng kể thời gian phản hồi.
Kết quả là một hệ thống có thể mở rộng từ một người dùng lên đến một nghìn người dùng. Chi phí vận hành rất thấp và có khả năng tích hợp với các nhà cung cấp như WorkOS hoặc Auth0.
Đừng chỉ xây dựng các công cụ cho chính mình. Hãy bắt đầu xây dựng cơ sở hạ tầng cho khách hàng của bạn.