Xác thực dành riêng cho Agent trên MCP Servers: Tích hợp JWKS giữa prism-mcp và AgentLair

07 tháng 4, 2026·5 phút đọc

Việc tích hợp xác thực JWT dựa trên JWKS vào prism-mcp đã được thực hiện chỉ trong 43 phút để giúp các AI agent truy cập an toàn vào bảng điều khiển Mind Palace. Giải pháp này cho phép xác định danh tính từng agent, tạo nhật ký kiểm tra chi tiết và áp dụng mô hình zero-trust cho mọi máy chủ MCP cần quyền truy cập an toàn.

Xác thực dành riêng cho Agent trên MCP Servers: Tích hợp JWKS giữa prism-mcp và AgentLair

Hôm qua, tôi đã mở một vấn đề (issue) trên dự án prism-mcp để đề xuất cơ chế xác thực JWT dựa trên JWKS, nhằm giúp các tác nhân AI (agents) có thể truy cập an toàn vào bảng điều khiển Mind Palace. Chỉ 43 phút sau, nhà phát triển dcostenco đã triển khai xong tính năng này. Đến khi phiên bản v9.0.5 ra mắt vài giờ sau đó, tích hợp này đã được hoàn thiện sẵn sàng cho môi trường sản xuất với các tính năng như khóa nhà phát hành (issuer locking), xác thực đối tượng (audience validation) và ghi log lỗi có cấu trúc.

Dưới đây là cách thức hoạt động của giải pháp này — và lý do tại sao mô hình này lại quan trọng đối với mọi máy chủ MCP cần bảo mật quyền truy cập của agent.

Vấn đề: "Ai đã xác thực?" so với "Agent nào đã xác thực?"

Xác thực cơ bản (Basic auth) chỉ trả lời được câu hỏi đầu tiên. Nó đủ tốt để bảo vệ bảng điều khiển khỏi những người ngẫu nhiên trên mạng.

Tuy nhiên, trong các triển khai đa agent — nơi bạn có năm, mười, hay năm mươi agent truy cập cùng một cơ sở kiến thức — việc chỉ biết là "ai đó có mật khẩu đã vào được" là không hữu ích. Bạn cần:

  • Danh tính cho từng agent ở cấp độ yêu cầu (request).
  • Nhật ký kiểm tra (audit trails) liên kết các thao tác đọc/ghi với các agent cụ thể.
  • Zero-trust (không tin tưởng mặc định), nơi mỗi token đều có phạm vi (scope) và thời gian sống ngắn.

Đó chính là những gì mà xác thực "agent-native" thông qua JWKS giải quyết được.

Tích hợp: Chỉ cần một Biến môi trường

prism-mcp hiện nay hỗ trợ biến môi trường PRISM_JWKS_URI. Bạn chỉ cần đặt nó bằng bất kỳ điểm cuối JWKS nào và xác thực token Bearer sẽ được kích hoạt ngay lập tức — không cần thay đổi mã nguồn.

Đối với AgentLair:

PRISM_JWKS_URI=https://agentlair.dev/.well-known/jwks.json
PRISM_JWT_ISSUER=https://agentlair.dev  # khóa token vào AgentLair (ngăn chặn tấn công thay thế)
PRISM_JWT_AUDIENCE=prism-dashboard      # tùy chọn — ràng buộc token với triển khai cụ thể này

Chỉ vậy thôi. Bảng điều khiển giờ đây sẽ xác minh các token Bearer đến dựa trên khóa JWKS Ed25519 trực tiếp của AgentLair (kid: ab0502f7, thuật toán: EdDSA) bằng thư viện jose — không cần các chuyến đi vòng (round-trips), mọi thứ xác minh ngoại tuyến.

Quy trình Token

Đầu tiên, phát hành AAT (Agent Auth Token) thông qua AgentLair:

// 1. Issue an AAT (Agent Auth Token) via AgentLair
const tokenRes = await fetch("https://api.agentlair.dev/v1/tokens/issue", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.AGENTLAIR_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    audience: "prism-dashboard",
    scopes: ["read", "write"],
  }),
});
const { token } = await tokenRes.json();

// 2. Call prism-mcp with the token
const res = await fetch("http://localhost:3000/api/memories", {
  headers: { "Authorization": `Bearer ${token}` },
});

Payload của JWT sẽ mang theo các thông tin sau:

Thông tin khai báo (Claim)Giá trịMục đích sử dụng
subacc_qgdxSULsXsmtHklZÁnh xạ tới req.agent_id trong prism-mcp
al_nameexploration-testTên dễ đọc cho con người dùng trong log
al_audit_urlhttps://agentlair.dev/audit/...Liên kết vết kiểm tra cho từng token
al_scopes["read", "write"]Kiểm soát truy cập theo phạm vi
isshttps://agentlair.devĐược xác thực dựa trên PRISM_JWT_ISSUER

Khả năng truy xuất nguồn gốc theo từng Agent

Sau khi xác minh, prism-mcp sẽ gán toàn bộ payload đã giải mã vào PrismAuthenticatedRequest. Mọi trình xử lý downstream đều biết được:

  • Agent nào đã thực hiện yêu cầu (req.agent_id từ sub).
  • Agent đó tên gì (al_name — hữu ích cho bảng điều khiển và log).
  • Tìm đâu để thấy vết kiểm tra đầy đủ (al_audit_url cho từng token, từng yêu cầu).

Điều này có nghĩa là log của Mind Palace của bạn có thể trả lời câu hỏi: "Những agent nào đã đọc bộ nhớ X giữa 2 giờ và 3 giờ chiều?" — thay vì chỉ biết là "có ai đó đã làm".

Tại sao mô hình này có khả năng mở rộng cao

Cách tiếp cận JWKS được thiết kế để trung tính với nhà cung cấp. dcostenco đã xây dựng nó để hoạt động với Okta, Auth0, Clerk hoặc bất kỳ nhà cung cấp JWT tùy chỉnh nào. AgentLair chỉ tình cờ là nhà cung cấp bên ngoài đầu tiên được xác nhận hoạt động.

Kiến trúc của nó như sau:

Agent → phát hành AAT (AgentLair) → đính kèm Bearer → prism-mcp xác minh (JWKS) → req.agent_id có sẵn → vết kiểm tra

Mọi máy chủ MCP xử lý dữ liệu nhạy cảm đều nên triển khai mô hình này. Nó mang lại:

  • Không trạng thái (Stateless) — không cần quản lý phiên, không lưu trữ token trên máy chủ.
  • Có thể kiểm tra (Auditable) — mọi yêu cầu đều mang theo một artifact danh tính có thể xác minh.
  • Có thể kết hợp (Composable) — hoạt động song song với các lớp xác thực hiện có.

Nếu bạn đang xây dựng một máy chủ MCP và cần quyền truy cập an toàn cho agent, việc triển khai PRISM_JWKS_URI trong prism-mcp là một tham chiếu vững chắc. Toàn bộ tích hợp được chi tiết trong vấn đề số #15.

AgentLair cung cấp danh tính agent liên tục — các cặp khóa Ed25519, token có phạm vi, điểm cuối JWKS và nhật ký kiểm tra. Nếu bạn đang xây dựng các hệ thống đa agent cần xác thực với các dịch vụ bên ngoài, hãy xem xét: agentlair.dev.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗