多个单点登录提供商
许多企业需要在 Supabase 中配置多个单点登录(SSO)提供商,以支持不同的环境、团队或组织结构。本指南说明了何时以及如何有效地设置多个提供商。
🌐 Many enterprises need multiple single sign-on (SSO) providers configured within Supabase to support different environments, teams, or organizational structures. This guide explains when and how to set up multiple providers effectively.
为什么要有多个单点登录提供商? #
🌐 Why multiple SSO providers?
需要多个单点登录(SSO)提供商的常见情况包括:
🌐 Common scenarios requiring multiple SSO providers include:
- 多环境:分开开发、预发布和生产环境
- 团队分离:不同的业务单元或部门
- 迁移:从一个身份提供者切换到另一个身份提供者
- 收购:整合拥有不同身份系统的子公司
- 测试:独立测试环境与生产环境并存
关键概念:IDP 发起允许每个域无限制的提供者 #
🌐 Key concept: IDP-initiated enables unlimited providers per domain
多个 SAML 应用的传统难题是域名冲突。如果只用 SP 发起的流程,每个 SAML 应用都需要独特的邮箱域名。因为你所有员工都用同一个域名(比如 company.com),这就会产生问题。
🌐 The traditional challenge with multiple SAML apps is domain conflicts. With SP-initiated flow only, each SAML app requires a unique email domain. Since all your employees use the same domain (e.g., company.com), this creates a problem.
解决方案: 使用身份提供者(IdP)发起的流程,这种方式不需要域名配置。你可以在同一个域名下创建无限数量的 SAML 应用。
推荐的模式
将每个环境配置为仅 IdP 发起(无域)。用户通过身份提供者中的不同应用图标访问每个环境。
🌐 Configure each environment as IdP-initiated only (no domains). Users access each environment through different app tiles in your identity provider.
有关技术细节,请参阅理解单点登录流程指南。
🌐 For technical details, see the Understanding SSO Sign-in Flows guide.
用例 1:多个环境(开发/测试/生产) #
🌐 Use case 1: Multiple environments (dev/staging/prod)
这是最常见的企业模式,也是 IDP 发起流程的主要使用场景。
🌐 This is the most common enterprise pattern and the primary use case for IDP-initiated flow.
挑战 #
🌐 The challenge
你有三个 Supabase 组织:
🌐 You have three Supabase organizations:
- 开发(
dev-org) - 暂存 (
staging-org) - 生产(
prod-org)
所有员工都使用 company.com 邮箱地址。每个环境都需要单独的 SSO 配置。
🌐 All employees use company.com email addresses. You need separate SSO configurations for each environment.
解决办法 #
🌐 The solution
在你的身份提供者中创建三个独立的 SAML 应用,每个指向不同的 Supabase 组织。
🌐 Create three separate SAML apps in your identity provider, each pointing to a different Supabase organization.
在你的身份提供者(Okta、Azure AD、Google Workspace)中 #
🌐 In your identity provider (Okta, Azure AD, Google Workspace)
- 创建 “Supabase Dev” SAML 应用
- 使用开发组织的 ACS URL 进行配置
- 分配开发者和测试人员
- 部署标有“Supabase Dev”的应用磁贴
- 创建 “Supabase Staging” SAML 应用
- 使用暂存组织的 ACS URL 配置
- 分配QA团队和发布经理
- 部署名为“Supabase Staging”的应用瓦片
- 创建 “Supabase Production” SAML 应用
- 使用生产组织的 ACS URL 进行配置
- 仅分配生产用户
- 部署标有“Supabase Production”的应用磁贴
在每个 Supabase 组织中 #
🌐 In each Supabase organization
- 导航到仪表板的SSO 设置部分
- 启用单点登录
- 保持 启用 SP 发起的登录 为“关闭”,这很关键
- 从对应的 IDP 应用配置元数据
- 设置属性映射
- 如果想的话,配置自动加入
结果 #
🌐 Result
- 用户点击他们需要的环境对应的应用图块
- 没有域名冲突(所有应用都使用
company.com) - 环境之间的清晰隔离
- 每个环境可以有不同的用户分配和角色
配置示例 #
🌐 Configuration example
这就是三种配置的区别:
🌐 Here's how the three configurations differ:
| 环境 | 组织 | IDP 应用名称 | ACS 链接 |
|---|---|---|---|
| 开发 | dev | "Supabase 开发" | https://...dev-org.../saml/acs |
| 预发布 | staging | "Supabase 预发布" | https://...staging-org.../saml/acs |
| 生产 | prod | "Supabase 生产" | https://...prod-org.../saml/acs |
每个组织 #
🌐 Each organization
- SP发起:关闭(未配置域)
- IDP 发起:开启(自动,无需配置)
- 自动加入:你的偏好(开发环境通常启用,生产环境通常禁用)
用例 2:不同的团队或业务单元 #
🌐 Use case 2: Different teams or business units
有些组织需要将团队隔离在不同的 Supabase 组织中。
🌐 Some organizations need to isolate teams within separate Supabase organizations.
示例场景 #
🌐 Example scenario
- 工程团队使用
engineering-org - 数据团队使用
data-org - 两队都有
company.com封邮件
配置方式 #
🌐 Configuration approach
选项A:由IDP发起,带有不同的应用图标 #
🌐 Option A: IDP-initiated with different app tiles
在你的身份提供商中创建单独的 SAML 应用:
🌐 Create separate SAML apps in your IDP:
- "Supabase 工程" → 指向
engineering-org - "Supabase 数据" → 指向
data-org
给每个应用分配合适的用户。用户只能看到分配给他们的应用块。
🌐 Assign appropriate users to each app. Users only see the tiles they're assigned to.
选项B:IDP和SP发起的角色基路由 #
🌐 Option B: Both IDP and SP-initiated with role-based routing
用同一个域配置两个组织,并启用 SP 发起模式:
🌐 Configure both organizations with SP-initiated enabled using the same domain:
- 两个组织都添加了
company.com作为域名 - 用户可以通过 SP 发起在 supabase.com 登录
- 系统根据组织成员身份进行路由(先匹配者优先)
- 还要提供用于显式路由的IDP瓦片
由服务提供商发起的多供应商路由
当多个组织使用同一个域的 SP 启动时,会使用用户是成员的第一个提供者。这可能会引起混乱。建议使用 IDP 启动以提高清晰度。
🌐 When multiple organizations use SP-initiated with the same domain, the first provider where the user is a member will be used. This can cause confusion. IDP-initiated is recommended for clarity.
用例3:从一个身份提供商迁移到另一个身份提供商 #
🌐 Use case 3: Migration from one IDP to another
当从一个身份提供商迁移到另一个时,使用多个提供商有助于确保过渡顺利。
🌐 When migrating from one identity provider to another, multiple providers help ensure a smooth transition.
迁移流程 #
🌐 Migration workflow
第一阶段:双重配置 #
🌐 Phase 1: Dual configuration
- 配置新的身份提供商作为额外的单点登录提供者
- 保持现有的 IDP 活跃
- 用小组测试新的IDP
- 两个提供商同时运行
第二阶段:逐步推出 #
🌐 Phase 2: Gradual rollout
- 分批把用户迁移到新的身份提供商
- 更新应用图块分配
- 注意问题
- 保留旧的 IDP 作为备用
第三阶段:切换 #
🌐 Phase 3: Cutover
- 把所有用户迁移到新的身份提供者
- 确认没有用户依赖旧的身份提供者
- 禁用(不要删除)旧的 IDP 提供者
- 注意是否有问题
第四阶段:清理 #
🌐 Phase 4: Cleanup
- 验证期后(1-2周)
- 删除旧的IDP提供商
- 更新文档
在迁移期间,始终至少保留一个非SSO的拥有者账户,以确保你永远不会失去对组织的访问权限。
🌐 Always maintain at least one non-SSO owner account during migrations to ensure you never lose access to the organization.
用例4:收购和子公司 #
🌐 Use case 4: Acquisitions and subsidiaries
拥有多个邮箱域名的组织需要为每个域名配置提供商设置。
🌐 Organizations with multiple email domains need provider configurations for each domain.
示例场景 #
🌐 Example scenario
- 母公司:
parent.com - 子公司1:
subsidiary1.com - 子公司 2:
subsidiary2.com
所有人都通过同一个中央身份提供者认证,但使用不同的邮箱域名。
🌐 All authenticate through the same central IDP but use different email domains.
配置方式 #
🌐 Configuration approach
选项 A:单一提供商,多域名(SP 发起) #
🌐 Option A: Single provider with multiple domains (SP-initiated)
- 启用 SP 发起的 SSO 流程
- 添加所有域名:
parent.com、subsidiary1.com、subsidiary2.com - 配置单个IDP元数据
- 任何匹配域的用户都可以通过 supabase.com 登录
选项 B:每个子公司使用不同的提供商(IDP 发起) #
🌐 Option B: Separate providers per subsidiary (IDP-initiated)
- 为每个实体创建单独的 SAML 应用
- 仅配置为 IDP 发起
- 根据子公司分配用户
- 更多隔离,更清晰的组织边界
一步步设置指南 #
🌐 Step-by-step setup guide
针对 IDP 发起的多环境模式 #
🌐 For IDP-initiated multi-environment pattern
这是大多数企业推荐的模式。
🌐 This is the recommended pattern for most enterprises.
步骤 1:规划你的环境 #
🌐 Step 1: Plan your environments
文档:
🌐 Document:
- 组织名称和标识名
- 环境用途(开发、测试、生产)
- 哪些用户需要访问哪些环境
- 每个环境的默认角色
步骤 2:在你的身份提供商中创建 SAML 应用 #
🌐 Step 2: Create SAML apps in your IDP
对于每个环境,按照你的服务提供商的指南来创建一个 SAML 应用:
🌐 For each environment, follow your provider-specific guide to create a SAML app:
命名规范示例 #
🌐 Naming convention example
- Supabase - 生产
- Supabase - 测试环境
- Supabase - 开发
使用一致的命名来帮助用户识别正确的环境。
🌐 Use consistent naming to help users identify the right environment.
步骤 3:配置每个 Supabase 组织 #
🌐 Step 3: Configure each Supabase organization
针对每个组织:
🌐 For each organization:
- 导航到仪表板的SSO 设置部分
- 启用单点登录
- 确认 启用 SP 发起的登录 是“关闭”
- 上传或粘贴对应 IDP 应用的元数据
- 配置属性映射:
- 电子邮件(必填):映射到
email - 名字(可选):映射到
name或displayName
- 电子邮件(必填):映射到
- 配置自动加入设置:
- 开发者:通常在拥有“开发者”角色时启用
- 分阶段部署:通常在“开发者”角色下启用
- 产品:通常禁用(仅限明确邀请)
- 保存配置
第4步:分别测试每个环境 #
🌐 Step 4: Test each environment separately
对于每个环境:
🌐 For each environment:
- 打开你的 IDP 仪表板(Okta、Azure、Google)
- 点击对应的应用图块
- 验证是否重定向到正确的 Supabase 组织
- 检查用户信息是否填写正确
- 验证自动加入行为(如果启用)
查看SSO 测试与最佳实践指南了解全面的测试流程。
🌐 See the SSO Testing and Best Practices guide for comprehensive testing procedures.
第5步:在你的身份提供商中分配用户 #
🌐 Step 5: Assign users in your IDP
在你的身份提供商中配置应用分配:
🌐 Configure app assignments in your IDP:
- 生产:仅限生产用户(限制性)
- 部署环境:QA团队、发布经理、高级工程师
- 开发:所有工程师和测试人员(宽松)
用户只能看到分配给他们的应用磁贴。
🌐 Users only see app tiles they're assigned to.
第6步:记录并沟通 #
🌐 Step 6: Document and communicate
为你的团队创建文档:
🌐 Create documentation for your team:
- 哪个应用图标对应哪个环境
- 每个环境的访问请求流程
- 命名规范和组织结构
- 紧急访问流程(非单点登录拥有者账户)
用户访问管理 #
🌐 User access management
IDP 应用分配策略 #
🌐 IDP app assignment strategies
按环境的访问控制 #
🌐 Per-environment access control
通过在你的身份提供商中管理应用分配来控制谁可以访问每个环境:
🌐 Control who can access each environment by managing app assignments in your IDP:
Engineering Team:├─ Supabase Dev (assigned) ✅├─ Supabase Staging (assigned) ✅└─ Supabase Prod (assigned) ✅QA Team:├─ Supabase Dev (assigned) ✅├─ Supabase Staging (assigned) ✅└─ Supabase Prod (NOT assigned) ❌Contractors:├─ Supabase Dev (assigned) ✅├─ Supabase Staging (NOT assigned) ❌└─ Supabase Prod (NOT assigned) ❌角色分配模式 #
🌐 Role assignment patterns
选项 1:每个环境不同的默认角色 #
🌐 Option 1: Different default roles per environment
- 开发者:自动加入“管理员”角色(开发者需要完全控制权限)
- 分阶段:自动加入“开发者”角色
- 产品:不自动加入,只能通过明确邀请,分“只读”或“开发者”
选项2:角色固定,手动晋升 #
🌐 Option 2: Consistent roles, manual promotion
- 所有环境:自动加入“开发者”角色
- 根据需要手动提升为“管理员”或“所有者”
- 提供稳定的基线,明确的提升
选项 3:不自动加入,手动控制 #
🌐 Option 3: No auto-join, explicit control
- 所有环境:自动加入已禁用
- 发送带有适当角色的明确邀请
- 最大控制,更高管理开销
根据你们组织的安全状况和操作偏好来选择。
🌐 Choose based on your organization's security posture and operational preferences.
最佳实践 #
🌐 Best practices
命名规范 #
🌐 Naming conventions
IDP 应用名称 #
🌐 IDP app names
使用一致且具有描述性的名称,清楚地指示环境:
🌐 Use consistent, descriptive names that clearly indicate the environment:
- ✅ “Supabase - 正式环境”
- ✅ "Supabase 生产环境"
- ❌ “Supabase”(不明确)
- ❌ “SUPA_PROD”(缩写不清楚)
Supabase 组织名称 #
🌐 Supabase organization names
尽可能匹配你的 IDP 应用名称:
🌐 Match your IDP app names when possible:
- IDP 应用:"Supabase - 生产" → 组织:
acme-production - IDP 应用:"Supabase - Staging" → 组织:
acme-staging - IDP 应用:"Supabase - Dev" → 组织:
acme-development
配置同步 #
🌐 Configuration synchronization
保持关键设置在各环境中同步:
🌐 Keep critical settings synchronized across environments:
- 属性映射:在所有提供商中应该相同
- 证书设置:协调所有环境的续期
- 安全账户:每个组织都需要一个非SSO的所有者账户
配置漂移检查清单 #
🌐 Configuration drift checklist
- 属性映射在各个环境中一致
- 所有供应商的证书到期日期都有记录
- 所有组织中都有非单点登录的拥有者账户
- 自动加入设置是故意的(不是意外的)
- 适合每个环境的默认角色
先在低环境下测试 #
🌐 Testing in lower environments first
总是在非生产环境中测试 SSO 更改:
🌐 Always test SSO changes in non-production environments:
- 在开发环境中进行更改
- 彻底测试(参见测试指南)
- 部署到预发布环境并进行验证
- 监控问题(1-2天)
- 在低使用期部署到生产环境
- 在生产部署后密切监控
安全注意事项 #
🌐 Security considerations
环境隔离 #
🌐 Environment isolation
- 不要在不同环境之间重复使用元数据(存在安全风险)
- 每个环境应该有独特的 ACS URL
- 确认 IDP 应用分配是否正确(别不小心给了生产环境权限)
访问审核 #
🌐 Access reviews
- 对谁有权限访问生产环境的季度审查
- 确认 IDP 应用的任务是否是最新的
- 移除已更改角色的用户的访问权限
- 审查自动加入配置(还合适吗?)
紧急访问 #
🌐 Break-glass access
每个组织至少必须有一个非SSO的拥有者账户:
🌐 Each organization must have at least one non-SSO owner account:
- 创建专用的“破玻璃”账户
- 把凭证存到安全的密码管理器里
- 定期(每季度)测试这些账户
- 记录紧急访问程序
故障排除 #
🌐 Troubleshooting
用户访问了错误的环境 #
🌐 Users accessing the wrong environment
症状 #
🌐 Symptom
用户点击了“Supabase 生产环境”图块,但看到的是开发环境。
🌐 User clicks "Supabase Prod" tile but sees the dev environment.
原因 #
🌐 Causes
- 元数据配置错误(在环境之间交换了)
- ACS 的网址指向了错误的组织
- 用户把错误的组织加到书签了
解决办法 #
🌐 Solution
- 在 IDP 应用配置中验证 ACS URL
- 比较 Supabase SSO 设置中的元数据
- 检查组织别名是否与预期环境匹配
- 让用户清除浏览器的Cookies然后再试一次
- 确认用户点击的是正确的应用图标
环境之间的配置漂移 #
🌐 Configuration drift between environments
症状 #
🌐 Symptom
单点登录在开发环境能用,但在预发布或生产环境会失败。
🌐 SSO works in dev but fails in staging or production.
原因 #
🌐 Causes
- 不同提供商之间的属性映射不同
- 证书在某个环境过期了,但其他环境没有
- 域配置不一致(如果使用 SP 发起的话)
解决办法 #
🌐 Solution
- 并排比较单点登录配置
- 检查属性映射是否相同
- 核实证书到期日期
- 在所有环境中使用同一个用户账号进行测试
- 查看 IDP 审计日志中的身份验证失败情况
用户看不到预期的应用图标 #
🌐 Users don't see expected app tiles
症状 #
🌐 Symptom
用户在 IDP 仪表板上找不到“Supabase Staging”图块。
🌐 User cannot find "Supabase Staging" tile in IDP dashboard.
原因 #
🌐 Causes
- 用户未在IDP中分配到应用
- 应用未在 IDP 上部署/发布
- 用户看错地方了(不同的IDP门户)
解决办法 #
🌐 Solution
- 在 IDP 管理控制台验证应用分配
- 检查应用是否已发布/活跃
- 确认用户已登出并重新登录到 IDP
- 确认用户正在查看正确的 IDP 门户(有些组织有多个)
自动加入把用户添加到错误的组织 #
🌐 Auto-join adding users to wrong organization
症状 #
🌐 Symptom
用户应该加入生产环境,却加入了开发环境。
🌐 User joins dev environment when they should join production.
原因 #
🌐 Cause
用户点击了错误的应用图标,自动加入已启用。
🌐 User clicked wrong app tile, auto-join is enabled.
预防 #
🌐 Prevention
- 在生产环境中禁用自动加入(仅限明确邀请)
- 使用清晰的应用图标命名
- 哪个磁贴对应哪个环境的文档
- 考虑为不同环境使用不同的 IDP 组
补救 #
🌐 Remediation
- 将用户从错误的组织中移除
- 向正确的组织发送明确邀请
- 向用户说明正确的应用图标使用方法
- 考虑关闭自动加入以防止再次发生
多个组织使用同一域名(SP发起的混淆) #
🌐 Multiple organizations with same domain (SP-initiated confusion)
症状 #
🌐 Symptom
开启 SP 发起并且多个组织中有相同域名时,用户会被导向意外的组织。
🌐 With SP-initiated enabled and same domain in multiple organizations, users get routed to unexpected organization.
原因 #
🌐 Cause
SP 发起的路由使用第一个匹配的提供者。
🌐 SP-initiated routing uses first matching provider.
解决办法 #
🌐 Solution
- 推荐: 切换为仅 IDP 发起(禁用 SP 发起)
- 从除一个组织之外的所有组织中移除域配置
- 提供清晰的IDP应用图标以便明确路由
- 文档说明组织用户应该通过SP发起访问
从单一供应商迁移到多个供应商 #
🌐 Migration from single to multiple providers
如果你现在只有一个单点登录提供商,但需要添加更多:
🌐 If you currently have a single SSO provider and need to add more:
第一阶段:规划 #
🌐 Phase 1: Planning
- 决定使用哪种模式(环境、团队等)
- 记录新的组织结构
- 为每个环境识别用户
- 制定用户沟通策略
第二阶段:创建新组织 #
🌐 Phase 2: Create new organizations
- 创建额外的 Supabase 组织
- 在每个组织中配置项目
- 如有需要,迁移数据(见项目转移)
第3步:配置单点登录提供商 #
🌐 Phase 3: Configure SSO providers
- 在你的身份提供商中创建更多 SAML 应用
- 在每个新组织中配置单点登录
- 一开始禁用自动加入
- 小组测试
第四阶段:迁移用户 #
🌐 Phase 4: Migrate users
- 向用户告知变化
- 把用户分配到合适的 IDP 应用
- 测试用户能否访问正确的环境
- 如果想的话,启用自动加入
第5阶段:注销旧配置(如适用) #
🌐 Phase 5: Decommission old configuration (if applicable)
- 把所有用户迁移到新结构
- 确认没人依赖旧配置
- 禁用旧的单点登录提供商
- 注意问题
- 验证期后删除
下一步 #
🌐 Next steps
- 配置你的 IDP: 请按照你的供应商专用指南操作
- 彻底测试: 查看 SSO 测试与最佳实践
- 了解登录流程: 阅读 理解 SSO 登录流程
- **选择正确的流程:**请参阅 选择合适的登录流程