模型上下文协议 (MCP) 身份验证
模型上下文协议(MCP)是一个开放标准,用于将 AI 代理和大型语言模型工具连接到数据源和服务。虽然 Supabase 本身不提供 MCP 服务器功能,但你可以自己搭建 MCP 服务器,连接到你的 Supabase 项目,并利用 Supabase Auth 的 OAuth 2.1 功能使用你现有的用户群来认证 AI 代理。
🌐 The Model Context Protocol (MCP) is an open standard for connecting AI agents and LLM tools to data sources and services. While Supabase doesn't provide MCP server functionality, you can build your own MCP servers that connect to your Supabase project and leverage Supabase Auth's OAuth 2.1 capabilities to authenticate AI agents using your existing user base.
为什么要在MCP中使用Supabase认证? #
🌐 Why use Supabase Auth for MCP?
在构建连接到你的 Supabase 项目的 MCP 服务器时,你可以利用现有的 Supabase Auth 基础设施来验证 AI 代理:
🌐 When building MCP servers that connect to your Supabase project, you can leverage your existing Supabase Auth infrastructure to authenticate AI agents:
- 利用你现有的用户群 - 不需要创建独立的认证系统;AI 代理作为你现有的用户进行认证
- 符合标准的 OAuth 2.1 - 完整实现,带 PKCE,满足 MCP 客户端的预期
- 自动发现 - MCP 客户端使用 Supabase 的发现端点自动配置
- 动态客户端注册 - MCP 客户端可以自动在你的项目中注册自己
- 行级安全 - 你现有的RLS策略会自动适用于MCP客户端
- 用户授权 - 用户通过你的授权流程明确批准 AI 代理访问
- 令牌管理 - Supabase 自动处理刷新令牌的轮换和过期
MCP 身份验证是如何工作的 #
🌐 How MCP authentication works
当你搭建一个连接到你 Supabase 项目的 MCP 服务器时,认证流程会通过 Supabase Auth 进行:
🌐 When you build an MCP server that connects to your Supabase project, authentication flows through Supabase Auth:
- 发现:MCP 客户端从 Supabase 的发现端点获取你的 OAuth 配置
- 注册(可选):客户端将自己注册为你 Supabase 项目中的 OAuth 客户端
- 授权:用户会被重定向到你的授权端点,以批准 AI 工具的访问
- 令牌交换:Supabase 会为已认证的用户发放访问令牌和刷新令牌
- 已认证访问:MCP 服务器现在可以代表用户向你的 Supabase API 发出请求
通过利用 Supabase Auth,你的 MCP 服务器可以用现有的用户账户来认证 AI 代理,而不需要搭建单独的认证系统。
🌐 By leveraging Supabase Auth, your MCP server can authenticate AI agents using your existing user accounts without building a separate authentication system.
先决条件 #
🌐 Prerequisites
在设置 MCP 认证之前:
🌐 Before setting up MCP authentication:
- 在你的 Supabase 项目中启用 OAuth 2.1 服务器
- 建立一个 授权端点
- (可选) 启用动态客户端注册
设置你的 MCP 服务器 #
🌐 Setting up your MCP server
把你的 MCP 服务器配置成使用你的 Supabase Auth 服务器:
🌐 Configure your MCP server to use your Supabase Auth server:
1https://<project-ref>.supabase.co/auth/v1用你在 Supabase 仪表板上的项目参考 ID 替换 <project-ref>。
🌐 Replace <project-ref> with your project reference ID from the Supabase dashboard.
MCP 客户端将自动从以下位置发现你的 OAuth 配置:
🌐 MCP clients will automatically discover your OAuth configuration from:
1https://<project-ref>.supabase.co/.well-known/oauth-authorization-server/auth/v1OAuth 客户端设置 #
🌐 OAuth client setup
根据你的 MCP 服务器实现方式,你有两个选择:
🌐 Depending on your MCP server implementation, you have two options:
- 预注册 OAuth 客户端 - 按照 注册 OAuth 客户端 指南手动注册你的客户端,并在你的 MCP 服务器中使用客户端凭证
- 动态客户端注册 - 在你的 Supabase 仪表板里,进入 Authentication > OAuth Server 启用这个功能,可以让 MCP 客户端自动注册自己,无需人工干预
动态注册允许任何 MCP 客户端注册到你的项目。考虑一下:
🌐 Dynamic registration allows any MCP client to register with your project. Consider:
- 要求所有客户端获得用户批准
- 定期监控注册客户
- 验证重定向 URI 是否来自受信任的域
用 Supabase Auth 搭建 MCP 服务器 #
🌐 Building an MCP server with Supabase Auth
当你搭建自己的MCP服务器时,可以整合Supabase Auth来将AI代理认证为你现有的用户,并利用你的RLS策略。
🌐 When building your own MCP server, integrate with Supabase Auth to authenticate AI agents as your existing users and leverage your RLS policies.
在找更简单的方法来搭建 MCP 服务器吗?
FastMCP 提供了一种简化的方式来搭建带有内置 Supabase 身份验证集成的 MCP 服务器。FastMCP 会自动处理 OAuth 配置、令牌管理和身份验证流程,让你可以专注于构建 AI 代理的功能。查看他们的 Supabase 集成指南 开始吧。
在你的应用中处理MCP令牌 #
🌐 Handling MCP tokens in your application
当你的 MCP 服务器代表已认证的用户向 Supabase API 发起请求时,它会像其他 OAuth 客户端一样发送由 Supabase Auth 签发的访问令牌。
🌐 When your MCP server makes requests to your Supabase APIs on behalf of authenticated users, it will send access tokens issued by Supabase Auth, like any other OAuth client.
验证 MCP 令牌 #
🌐 Validating MCP tokens
和其他 OAuth 客户端一样使用相同的令牌验证。
🌐 Use the same token validation as other OAuth clients.
更多示例请参见 Token 安全与 RLS。
🌐 See Token Security & RLS for more examples.
安全注意事项 #
🌐 Security considerations
用户批准 #
🌐 User approval
始终要求 MCP 客户端获得用户明确批准:
🌐 Always require explicit user approval for MCP clients:
- 清楚地展示AI代理可以访问的信息
- 显示客户名称和描述
- 列出被请求的权限
- 提供一个拒绝访问的选项
- 允许用户以后撤销访问权限
故障排除 #
🌐 Troubleshooting
MCP 客户端无法发现 OAuth 配置 #
🌐 MCP client can't discover OAuth configuration
问题:客户端显示“OAuth 发现失败”或类似错误。
解决方案:
- 确认你的项目启用了 OAuth 2.1
- 检查
/.well-known/oauth-authorization-server是否返回有效的 JSON - 确保你的项目网址可以访问
动态注册失败 #
🌐 Dynamic registration fails
问题:客户端在注册端点收到 403 或 404。
解决方案:
- 在项目设置中启用动态客户端注册
- 确认重定向 URI 是否有效,完整的 URL(协议、域名、路径和端口)
- 检查注册端点的速率限制
令牌交换失败 #
🌐 Token exchange fails
问题:客户端收到“invalid_grant”错误。
解决方案:
- 验证授权码是否未过期(10分钟)
- 确保代码验证器与代码挑战匹配
- 检查重定向 URI 是否与注册完全匹配
- 确认 client_id 是否正确
RLS 策略阻止 MCP 访问 #
🌐 RLS policies block MCP access
问题:尽管有有效的令牌,MCP 客户端仍然无法访问数据。
解决方案:
- 检查 RLS 策略是否包含 MCP 客户端的
client_id - 确认用户是否有必要的权限
- 用秘密密钥测试以隔离 RLS 问题
- 查看 令牌安全指南
下一步 #
🌐 Next steps
- 使用 RLS 保障安全 - 为 MCP 客户创建细粒度策略
- OAuth 流程 - 深入探讨 OAuth 的实现
- MCP 规范 - 官方 MCP 文档