Cerbos MCP授权
本项目演示了如何使用 模型上下文协议(MCP) 和 Cerbos.
概述
该应用程序创建了一个MCP服务器,向GitHub Copilot等人工智能助手公开费用管理工具,同时使用Cerbos策略强制执行基于角色的访问控制。不同的用户角色(管理员、经理、用户)访问特定工具的权限不同。
特性
- 基于角色的访问控制:根据用户角色动态启用/禁用MCP工具
- 声明性策略定义:使用YAML文件定义访问控制策略
- 集中授权:利用Cerbos PDP(策略决策点)进行授权决策
入门指南
先决条件
- Node.js(v16+)
- Docker(用于运行Cerbos PDP)
安装
- 克隆此存储库
- 安装依赖项:
npm install运行应用程序
步骤1:启动Cerbos PDP
在Docker中运行Cerbos策略决策点:
docker run --rm -it -p 3593:3593 \
-v "$(pwd)/policies":/policies \
ghcr.io/cerbos/cerbos:latest步骤2:启动MCP服务器
npm start服务器将在端口3000上运行。
授权策略
应用程序使用以下基于角色的权限:
| 工具 | 描述 | 允许的角色 |
|---|---|---|
| list_expenses | 列出费用 | 管理员、经理、用户 |
| add_expense | 添加费用 | 用户 |
| approve_expense | 批准费用 | 管理员、经理 |
| reject_expense | 拒绝费用 | 管理员、经理 |
| delete_expense | 删除费用 | 管理员 |
| superpower_tool | 授予超能力 | 管理员 |
这些权限在中定义 policies/mcp_expenses.yaml.
测试不同的用户角色
在实际应用中,MCP将通过OAuth服务器对用户进行身份验证,以检索此信息。为了简单起见,您可以通过修改 roles 数组in index.js:
app.use((req, res, next) => {
req.user = { id: "user-123", roles: ["admin"] }; // Change roles here
next();
});可用角色: admin, manager, user
使用MCP客户端进行测试
克劳德
将以下内容添加到您的 claude_desktop_config.json 文件:
{
"mcpServers": {
"cerbos-demo": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:3000/mcp"]
}
}
}VSCode
- 在VS代码中安装MCP客户端扩展
- 打开命令面板(Ctrl+Shift+P)并选择“MCP:添加服务器”
- 请输入您的服务器URL:
http://localhost:3000/mcp - 连接到服务器,根据您的角色查看哪些工具可用
按角色划分的交互示例
在中设置不同角色后尝试这些示例 index.js:
- 作为一个
user(roles: ['user']):
- “添加100美元的费用”→ 成功 - “批准费用”→ 失败(工具不可用)
- 作为一个
manager(roles: ['manager']):
- “批准费用123”→ 成功 - “删除费用123”→ 失败(工具不可用)
- 作为一个
admin(roles: ['admin']):
- “删除费用123”→ 成功 - 所有工具都可用
实现细节
该应用程序通过以下方式将MCP与Cerbos集成在一起:
- 定义MCP服务器中的所有工具
- 根据用户角色检查Cerbos对每个工具的权限
- 根据授权结果动态启用/禁用工具
- 通知MCP客户端工具可用性更改
