配置 MCP 身份验证
MCP 服务涉及两条身份链路:入站——MCP 客户端如何向数据墙DBW 证明身份;出站——数据墙DBW 以什么身份连接数据库。两条链路独立配置。
出站:数据库连接身份
出站连接使用 data-source 中的连接字符串,与 REST 和 GraphQL 完全一致。推荐通过环境变量传入:
{
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
}
}环境变量值示例:
Server=host;Database=db;User ID=app-user;Password=pwd;Encrypt=True;TrustServerCertificate=True;MCP 工具执行的查询使用的是这个连接身份。数据库用户拥有的权限即 MCP 代理可执行操作的上限。
入站:MCP 客户端认证
入站认证控制 MCP 客户端如何向服务端证明身份,有三种模式。
匿名模式(Unauthenticated)
默认配置,服务不做身份验证。所有 MCP 请求按 anonymous 角色处理:
{
"runtime": {
"host": {
"authentication": {
"provider": "Unauthenticated"
}
}
}
}适用场景:
- 本地开发和测试。
- 服务位于可信网关之后,网关已完成认证。
- 内网环境,不面向外部用户。
IMPORTANT
匿名模式下,需要在实体的 permissions 中显式配置 anonymous 角色的操作权限。否则所有 MCP 请求会被拒绝。
JWT 模式(Custom)
MCP 客户端在请求中携带 Bearer Token,服务验证令牌的 issuer、audience 和签名:
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "api://dab-api",
"issuer": "https://identity.example.com/"
}
}
}
}
}适用场景:
- MCP 客户端能够发送 Bearer Token。
- 对接第三方身份系统(Okta、Auth0、Keycloak)。
- 需要根据用户角色区分 MCP 访问权限。
令牌验证通过后,引擎从 roles 声明提取用户角色。客户端可通过 X-MS-API-ROLE 头指定本次请求使用的角色。
网关模式
在数据墙DBW 前放置 API 网关或反向代理(Nginx、Traefik 等),由网关完成认证后转发请求:
MCP 客户端 → 网关(认证) → 数据墙DBW /mcp数据墙DBW 配置为匿名模式,网关负责身份验证并将角色信息注入请求头。这种模式下,认证逻辑从数据墙DBW 中解耦出去,由基础设施统一管理。
Stdio 模式的身份验证
Stdio 模式下,无论配置文件如何设置,认证提供程序都会被自动覆盖为 Simulator:
身份验证提供程序 → Simulator(强制覆盖)Simulator 模式下所有请求按指定角色处理,不验证令牌。角色通过启动参数指定:
dab start --mcp-stdio role:editor省略时默认为 anonymous。Stdio 模式仅用于本地开发,不应在生产环境使用。
Stdio 模式内部行为
| 行为 | 说明 |
|---|---|
| UTF-8 无 BOM | 控制台输入输出强制为不带 BOM 的 UTF-8 编码 |
| Simulator 认证 | 自动将认证提供程序覆盖为 Simulator |
| 无 HTTP 监听 | 不绑定任何 TCP 端口 |
| 请求大小限制 | 传入请求限制为 1 MB |
启动期间以下配置键会被内存覆盖:
| 键 | 值 |
|---|---|
MCP:StdioMode | "true" |
MCP:Role | "<role-name>" 或 "anonymous" |
Runtime:Host:Authentication:Provider | "Simulator" |
MCP 角色的权限规划
为 MCP 代理创建专用的受限角色是推荐做法:
{
"entities": {
"Product": {
"permissions": [
{ "role": "mcp-agent", "actions": ["read"] }
]
},
"Order": {
"permissions": [
{ "role": "mcp-agent", "actions": ["read", "create"] }
]
}
}
}| 建议 | 说明 |
|---|---|
| 不给写入和删除权限 | 除非业务明确需要 AI 代理修改数据 |
| 排除敏感字段 | 通过 fields.exclude 对 MCP 代理角色隐藏敏感列 |
| 限制行级数据 | 通过数据库策略限制 MCP 代理仅可见必要数据行 |
| 审计日志 | 为 MCP 代理专用角色启用日志,追踪代理行为 |
下一步
- 连接 MCP 客户端 — VS Code、Claude Desktop 配置。
- 启用 MCP 服务 — 全局和实体级 MCP 开关。
