使用 Supabase Auth 构建 “Sign in with Your App”

发布: (2025年12月24日 GMT+8 23:45)
9 min read
原文: Dev.to

Source: Dev.to

Cover image for Build "Sign in with Your App" using Supabase Auth

你已经无数次使用了 “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_idrole)以及 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_idrole 声明,以及标识发起请求的 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 客户端。

  1. 注册客户端 – 配置允许的重定向 URI 并获取 client_id
  2. 构建授权流程 – 创建一个接收 OAuth 授权请求的端点,使用现有的 Supabase Auth 方法对用户进行身份验证,展示同意 UI,并通过 Supabase Auth 确认批准。
  3. 更新行级安全策略 – 确保你的 RLS 规则在授予访问权限时考虑 client_id 声明。

配置完成后,你的 Supabase 项目即可作为功能完整的 OAuth 2.1 和 OpenID Connect 提供者,为 AI 代理、第三方应用以及企业 SSO 解决方案提供服务。

Back to Blog

相关文章

阅读更多 »

了解 JSON Web Token (JWT)

在创建 Web 应用程序的某个时刻,我们需要为系统开发一个认证解决方案。有多种策略可以实现,例如 aute...

Payload 中的自定义 auth

Payload 中自定义身份验证的封面图像 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads...