Supabase|集成 Google 登录认证
iOS 应用的 Google 登录流程:
iOS App → Google OAuth (获取 ID Token) → Supabase Auth (验证 Token) → 返回 Session
在 Google Cloud Console 创建 OAuth 客户端(iOS 以及 Web)
iOS 客户端出于安全考虑不提供 Client Secret(移动端无法安全存储密钥),但 Supabase 作为服务器端需要 Client Secret 来与 Google OAuth 服务通信。
因此,我们需要创建两个 OAuth 2.0 Client IDs,一起添加到 Supabase 配置后台。
💡
这个步骤都可以让 Claude Code 操作,它清楚如何做。
| 客户端类型 | 用途 | Client Secret |
|---|---|---|
| iOS | iOS 设备上发起 Google 登录,获取 ID Token | ❌ 无 |
| Web | Supabase 服务器端验证 Token | ✅ 有 |
创建 iOS OAuth 客户端
- 访问 https://console.cloud.google.com/ > Google Auth Platform > Clients
- 点击 + Create client,选择 iOS
- 填写 Bundle ID(与 Xcode 项目一致)
- 创建后下载 plist 文件
创建 Web OAuth 客户端
- 点击 + Create client,选择 Web application
- 在 Authorized redirect URIs 中添加:
https://your-project-ref.supabase.co/auth/v1/callback - 创建后记录 Client ID 和 Client Secret

配置 Supabase Google 认证
配置 Client IDs
在 Supabase Dashboard 启用 Google 认证方式。
Client IDs 必须填写两个,使用逗号分隔。

必须启用 Skip nonce checks
Nonce 是一次性随机字符串,用于防止重放攻击:
- 客户端生成 nonce → 发送给 Google
- Google 将 nonce 包含在 ID Token 中
- 服务器验证 nonce 是否匹配
为什么 iOS 必须跳过?
iOS Google Sign-In SDK 的限制:
- SDK 内部自动生成 nonce
- 不会将原始 nonce 暴露给应用
let idToken = result.user.idToken?.tokenString // ✅ 可获取
let nonce = ??? // ❌ 无法获取 SDK 内部的 nonce
由于应用无法获取 nonce,就无法传递给 Supabase 验证,因此必须跳过。
安全说明:跳过 nonce 检查会略微降低安全性,但 ID Token 本身有效期较短(约 1 小时),可部分缓解风险。
Comments ()