在 Keycloak 工程拆解 中,我们看到了自建 IAM 的工程细节。但很多团队面临的实际问题是:我们应该自建 Keycloak,还是直接买 Auth0/Okta/Entra?
这个问题不能被简化为”开源 vs 商业”的意识形态之争。它是工程经济学——总拥有成本(TCO)、团队能力、业务规模和定制需求的函数。
一、成本模型的工程拆分
IAM 的成本不仅是 license 费用。完整的成本模型包括:
TCO = License Fee
+ Infrastructure (compute + storage + network)
+ Operations (部署、监控、升级、故障处理)
+ Engineering (定制开发、集成、API 对接)
+ Knowledge (培训、文档、团队学习曲线)
+ Risk (供应商锁定、合规风险、供应商 outage)
1.1 自建 Keycloak 的成本
以一个中等规模的 B2B SaaS 公司为例(10 万 MAU,5 个企业 SSO 集成):
| 成本项 | 估算 | 说明 |
|---|---|---|
| 基础设施 | 2-4 vCPU + 8 GB RAM + RDS PostgreSQL | 约 $200-400/月(双节点 + LB) |
| 运维人力 | 0.3-0.5 FTE | 升级、监控、故障处理、备份恢复 |
| 定制开发 | 因人而异 | 自定义认证流、与内部系统集成、UI 定制 |
| HA/多活 | 额外 1.5-2x 基础设施成本 | 多区域部署、数据库复制 |
| License | $0 | Apache License 2.0 |
隐性成本: - Keycloak 的版本升级不是零成本的——从 21.x 到 22.x 的 Quarkus 迁移,从 24.x 到 25.x 的 API 变更,都需要投入时间。 - Keycloak 的内部知识积累——团队中至少需要 1 人深入理解 Keycloak 的 SPI、Authentication Flow 引擎和数据库 schema。
1.2 采购 Auth0 / Okta 的成本
以 Auth0 的 B2B 定价为例(2026 年公开信息):
| 成本项 | 估算 | 说明 |
|---|---|---|
| License(B2B Essential) | $800/月起 (1000 MAU) → $3000+/月 (10 万 MAU) | MAU 阶梯定价,含 OIDC/SAML SSO |
| Enterprise SSO 附加 | 额外费用(企业套餐) | SAML/OIDC 对接企业 IdP |
| MFA 附加 | 包含或附加 | Auth0 的 Adaptive MFA 为附加模块 |
| 组织(Organization) | B2B 套餐包含多租户 | Okta 的 Org2Org 更成熟 |
| 运维 | $0(SaaS) | Auth0 承担全部基础设施 |
| 定制 UI | 低代码配置 | 深度定制受限——不能用 SPI 写自定义代码 |
| 供应商锁定 | 未来切换成本高 | 迁移 10 万用户的认证数据到另一个平台是大型工程 |
1.3 盈亏平衡点
粗略估算:对于一个 MAU 在 5000 以下的 SaaS 创业公司,Auth0 的 Free Tier 或低端付费计划(~$300/月)远低于自建 Keycloak 的人力和基础设施成本(~$800/月)。
对于 MAU 在 10 万以上的 SaaS 公司,Auth0/Okta 的年费用($30,000-$80,000/年)与自建 Keycloak 的一个专职 IAM 工程师的年薪(包含 on-call 和其他成本)处于同一量级。此时决策取决于其他因素——定制深度、数据主权、合规需求。
二、功能对比:不是什么都能互相替代
| 能力 | Keycloak (自建) | Auth0 | Okta Workforce | Azure AD / Entra ID |
|---|---|---|---|---|
| OIDC / OAuth 2.0 | 全支持 | 全支持 | 全支持 | 全支持 |
| SAML 2.0 | 全支持 | 全支持 | 全支持 | 全支持(原生) |
| 社交登录 | 内置(Google/GitHub/Facebook 等) | 内置 + 更多 | 有限 | Microsoft / Google |
| 自定义认证流 | SPI 编写任意 Authenticator | Auth0 Actions (Node.js) | Okta Workflows (低代码) | 条件访问策略 |
| 多租户 (B2B) | 手动架构(多 Realm 或 Group 隔离) | Organizations (B2B 套餐) | Org2Org | B2B 直接联合 |
| User Federation | 内置(LDAP/AD + 自定义 SPI) | 有限(企业连接器) | AD/LDAP Agent | 原生 AD 集成 |
| 审计与合规 | 自建日志管道 | Auth0 Log Streams | Okta System Log | Entra 审计日志 |
| API 授权 | 手动集成(配合 OPA/Cedar) | RBAC + FGA (基于 OpenFGA) | 有限 | Entra Permissions Management |
关键差异:
- Auth0 Actions vs Keycloak SPI:Auth0 Actions 是一个在登录流程中运行的 Node.js 函数,可以做轻量级的自定义逻辑(如 Whitelist 过滤、自定义 claims、发送通知)。但 Actions 不能实现”完全自己写一套认证流程”(如对接内部 HR 系统做实时身份验证)——这需要 Keycloak 的 SPI 深度扩展。
- Entra ID 的 AD 原生集成:如果企业已经全面依赖 Microsoft 365 和 Azure,Entra ID 的无缝集成(Azure AD Connect、Conditional Access、Intune 设备合规)是自建 Keycloak 无法复制的。
- Okta 的 Org2Org:大型企业集团可能已经统一使用 Okta——如果那些客户要求”我们只愿意接 Okta”,你作为 SaaS 提供商只需要支持 OIDC/SAML 即可,不需要自己成为 Okta 客户。
三、决策框架
flowchart TD
Q1{"业务是 B2C<br/>还是 B2B?"}
Q1 -->|"B2C<br/>(百万级用户)"| A1["采购 Auth0 / 云厂商方案<br/>自建 Keycloak 的运维成本<br/>在 B2C 量级下失控"]
Q1 -->|"B2B<br/>(千-10万级用户)"| Q2{"是否需要深度定制<br/>或数据主权要求?"}
Q2 -->|"需要"| Q3{"团队有 2+ 人<br/>能投入 IAM?"}
Q3 -->|"有"| A2["自建 Keycloak<br/>+ 配合 OPA/Zanzibar"]
Q3 -->|"没有"| A3["采购 Auth0 / Okta<br/>(企业级功能匹配)"]
Q2 -->|"不需要"| Q4{"是否已全栈使用<br/>Microsoft/Azure?"}
Q4 -->|"是"| A4["Entra ID<br/>(生态协同优势)"]
Q4 -->|"否"| A3
A1 -.->|"如果业务复杂度增加<br/>(如多租户权限)"| A2
A3 -.->|"如果 MAU 增长到<br/>License 成本超过人力成本"| A2
工程判据:如果以下三个条件中满足两个,建议自建: 1. MAU > 50,000(商业 license 费用 > 一名 IAM 工程师的年薪)。 2. 需要深度定制认证流程(有自己的认证因素、与内部系统有复杂的实时交互)。 3. 数据主权或合规要求数据不得出特定区域(Auth0/Okta 的数据中心选择有限或不满足合规)。
四、迁移成本的事前评估
在选择”自建”或”采购”时,必须考虑切换成本:
- 自建 → 采购:迁移用户密码不可能(哈希不可逆),需要”渐变迁移”——新用户去新的 IdP,老用户在旧 IdP,逐步迁移或强制全员重新登录。
- 采购 → 自建:同样的问题反向——但可以导出用户数据(Auth0 和 Okta 都支持用户数据导出)。MFA 种子和 WebAuthn credential 不可迁移——必须让用户重新注册。
- 策略和权限数据:OAuth Clients 配置、权限规则(如果用了 OpenFGA/Zanzibar)可以在新平台重建,需要事前设计好自动化导入脚本。
上一篇:Keycloak 工程拆解:Realm、Client、Flow 与扩展机制 下一篇:CIAM 架构:面向 B2B / B2C SaaS 的身份平台
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【身份与访问控制工程】SCIM 与账号生命周期:开通、变更、离职自动化
SSO 只解决认证,SCIM 解决账号的生命周期管理。但 SCIM 2.0 的实现远不是调几个 REST API 那么简单:User/Group schema 的映射、Delta vs Full sync 的同步策略、Patch 操作语义,每个环节都有坑。本文从账号生命周期的四个关键事件出发,拆解 SCIM 2.0 的核心协议、同步模式、Schema 扩展,以及与企业 IdP(Azure AD、Okta)对接的实际工程经验。
【身份与访问控制工程】IAM 全景:为什么这是高价值赛道
从 2020 年 SolarWinds 到 2024 年 Okta 支持系统泄露,身份基础设施的安全失败反复证明一件事:IAM 不是 IT 支撑系统,而是安全架构的承重墙。本文建立现代 IAM 的全景地图——从认证协议、令牌体系、权限模型到身份治理与平台选型,给出 5 个贯穿全系列的核心问题。
【身份与访问控制工程】Keycloak 工程拆解:Realm、Client、Flow 与扩展机制
Keycloak 是 CNCF Incubating 项目中最成熟的 IAM 平台,也是自建身份系统的首选开源方案。但它不是'下个 JAR 跑起来就行'的简单软件——Realm 的隔离模型、Authentication Flow 的执行引擎、Client Scope 和 Protocol Mapper 的职责分离、自定义 SPI 扩展点——理解这些内部架构才能做好生产部署。本文从 Keycloak 的核心概念模型出发,拆解其内部执行路径和扩展机制。
身份与访问控制工程
从 OIDC、OAuth 2.1、SAML、SCIM 到多租户权限、CIAM、PAM 与身份平台选型——系统拆解现代身份与访问控制的协议、架构与工程实践。