使用 Supabase Auth 构建 “Sign in with Your App”
Source: Dev.to

你已经无数次使用了 “Sign in with Google” 和 “Sign in with GitHub”。
但如果你的 Supabase 项目本身可以成为身份提供者呢?今天,我们为 Supabase Auth 添加了 OAuth 2.1 和 OpenID Connect 服务器功能,使你的项目成为完整的身份提供者。
这将开启强大的新可能性:
- 通过模型上下文协议(MCP)让 AI 代理通过你的应用进行身份验证
- 第三方开发者在你的平台上构建应用
- 合作伙伴集成安全访问你的 API
- 企业单点登录
全部使用你已经信赖、经受考验的身份验证基础设施。
为什么我们构建它
直接的催化剂是什么?模型上下文协议(MCP)认证。随着 AI 代理和大型语言模型工具的普及,它们需要一种标准化的方式来对服务进行身份验证。MCP 已经成为该标准,并且基于 OAuth 2.1 构建。你的 Supabase 项目现在可以成为这些 AI 工具进行身份验证的身份提供者。
但其应用远超 AI:
- 第三方开发者生态系统 – 让合作伙伴构建与平台集成的应用
- 合作伙伴 API 访问 – 授予对外部服务的安全访问
- “Powered by [Your App]” – 让用户使用在平台上的现有账户登录合作伙伴应用
- 企业单点登录 – 完整的 OpenID Connect 支持,包括 ID 令牌、UserInfo 端点以及组织级单点登录
如果你正在构建一个平台,需要让其他开发者或服务安全访问用户数据,那么 OAuth 2.1 服务器功能已经内置在你的 Supabase 项目中。
您可以构建的内容
使用 Supabase Auth 作为 OAuth 2.1 提供商,您可以:
面向 AI 与自动化
- 通过您的 Supabase 项目对用户进行身份验证的 MCP 服务器
- 能够在适当授权下安全访问用户数据的 AI 代理
- 集成到您应用生态系统中的 LLM 工具
面向开发者平台
- 提供 “使用 [Your App] 登录” 的第三方应用
- 具备细粒度访问控制的合作伙伴集成
- 使用 OAuth 令牌的开发者 API 访问
- 基于您平台构建的 Marketplace 应用
面向企业
- 使用 ID 令牌和 UserInfo 端点的 OpenID Connect 单点登录(SSO)
- 跨服务的集中身份管理
- 符合标准的企业身份验证
- 符合合规要求的审计日志
工作原理:全局概览
Supabase Auth 实现了 OAuth 2.1 与 OpenID Connect (OIDC),这是现代的安全认证与身份标准。其核心是 带 PKCE 的授权码流程(Proof Key for Code Exchange)。
- Authorization code flow – 服务器端应用和本地应用最安全的 OAuth 流程。
- PKCE – 防止授权码被拦截的攻击。
- Access tokens – 包含标准 Supabase 声明(
user_id、role)以及 OAuth 特定声明(如client_id)的 JWT。 - ID tokens – 标准化的身份令牌,携带用户资料信息(用于 OIDC 流程)。
- UserInfo endpoint – 让客户端获取用户数据。
- Refresh tokens – 实现无需重新认证的长期会话。
- JWKS endpoint – 为第三方提供用于验证令牌的公钥基础设施。
最棒的是?您现有的 Supabase 安全模型可以自然地扩展到 OAuth:行级安全(RLS)策略同样适用于 OAuth 访问令牌,就像对普通会话令牌一样。
Source: …
与您现有的 Auth 堆栈配合使用
此实现最强大的方面之一是它能够无缝集成您已经在使用的 Supabase Auth 功能。当用户通过 OAuth 流程进行身份验证时,您仍然可以使用 Supabase Auth 的所有现有方法:
- 密码认证
- 魔法链接
- 社交提供商(Google、GitHub 等)
- 多因素认证(MFA)
- 电话认证
您的第三方集成可以受益于现有的身份验证安全性,而无需重新构建任何内容。
自定义访问令牌钩子
已经在使用 自定义访问令牌钩子 为用户令牌添加自定义声明了吗?它们同样适用于 OAuth 令牌。您可以注入特定客户端的声明、添加自定义权限,或实现任何所需的令牌自定义逻辑。对普通认证令牌的灵活性同样适用于 OAuth。
使用 OAuth 令牌的 RLS 策略
您的 RLS 策略会自动应用于 OAuth 访问令牌。这些令牌包含您熟悉的标准 user_id 和 role 声明,以及标识发起请求的 OAuth 客户端的 client_id 声明。
-- 允许移动应用访问用户资料
CREATE POLICY "Mobile app can read profiles"
ON profiles FOR SELECT
USING (
(auth.uid() = user_id)
AND ((auth.jwt() ->> 'client_id') = 'mobile-app-client-id')
);
-- 允许第三方分析仪表盘只读访问指标
CREATE POLICY "Analytics dashboard can read metrics"
ON user_metrics FOR SELECT
USING (
(auth.uid() = user_id)
AND ((auth.jwt() ->> 'client_id') = 'analytics-dashboard-client-id')
);
MCP 认证
Supabase Auth 完全符合 Model Context Protocol 的 OAuth 2.1 身份验证规范。您的 Supabase 项目在 /.well-known/oauth-authorization-server 暴露标准的 OAuth 授权服务器元数据,能够自动发现授权端点、令牌端点及其功能。MCP 客户端可以使用 OAuth 2.1 动态客户端注册来动态注册自身。
准备好将您的 Supabase 项目转变为身份提供者了吗? 🚀
MCP 集成(无需手动配置)
这在实际操作中意味着:将兼容 MCP 的 AI 工具指向你的 Supabase 项目的 auth URL,剩下的交给它处理。该工具会发现你的端点,将自身注册为客户端,启动 OAuth 流程并获取令牌。AI 代理以用户身份进行身份验证,所有 RLS 策略会自动生效。用户会看到你的授权页面,批准访问后,AI 工具便以他们的身份、按照你定义的权限执行操作。无需暴露密码,也不需要自定义 API 包装器。
我们才刚刚起步。我们正在努力让在 Supabase 直接构建 MCP 服务器变得更简单,将你喜爱的开发者体验带入 AI 代理集成。
入门
在 Supabase 项目中设置 OAuth 2.1,首先需要通过 Supabase 仪表盘或 Management API 注册 OAuth 客户端。
- 注册客户端 – 配置允许的重定向 URI 并获取
client_id。 - 构建授权流程 – 创建一个接收 OAuth 授权请求的端点,使用现有的 Supabase Auth 方法对用户进行身份验证,展示同意 UI,并通过 Supabase Auth 确认批准。
- 更新行级安全策略 – 确保你的 RLS 规则在授予访问权限时考虑
client_id声明。
配置完成后,你的 Supabase 项目即可作为功能完整的 OAuth 2.1 和 OpenID Connect 提供者,为 AI 代理、第三方应用以及企业 SSO 解决方案提供服务。