为什么需要区分两种 IAM?

很多团队第一次接触身份系统时,会默认「IAM 就是管账号的」——不管这个账号是员工、合作伙伴还是终端用户。但真正上手后很快发现:员工身份管理(Workforce IAM)和客户身份管理(CIAM,Customer IAM)面对的需求几乎完全不同。把 CIAM 需求硬塞进为员工设计的 IAM 系统,会踩遍从性能瓶颈到隐私合规的所有坑。

这篇文章把两种 IAM 的差异讲透:它们分别解决什么问题、架构上有什么不同、如何选型和迁移。

两种 IAM 的定义

维度Workforce IAM(员工身份)CIAM(客户身份)
管理对象员工、承包商、合作伙伴终端用户、消费者、客户
身份来源HR 系统(入职 → 创建账号)用户自助注册(注册 → 创建账号)
账号规模通常数百到数万数百万到数亿
生命周期入职 → 调岗 → 离职(Joiner-Mover-Leaver)注册 → 活跃 → 沉默 → 注销
认证方式企业 SSO + MFA(强制)社交登录 + 密码 + Passkey(可选)
权限模型RBAC + 组织架构映射自助权限 + 细粒度资源控制
合规要求等保/SOC2/ISO 27001 审计GDPR/CCPA 隐私合规、同意管理
性能特征低频(早 9 点登录峰值)高频(持续的注册登录、Token 刷新)
用户体验功能至上(内部工具,可用就行)体验至上(流失 = 收入损失)
典型产品Okta Workforce、Azure AD/Entra ID、KeycloakAuth0、Amazon Cognito、Logto、Keycloak(可配置)

两种 IAM 的差异根植于一个事实:员工用 IAM 是因为公司要求的,客户用是因为他们想用你的产品。这个差异决定了所有设计决策。

架构差异

  graph TB
    subgraph "Workforce IAM 流程"
        HR[HR 系统] -->|入职触发| IDP1[企业 IdP<br/>Keycloak / Entra ID]
        IDP1 -->|SCIM 自动供应| App1[企业应用]
        IDP1 -->|SSO + MFA| User1[员工]
        IDP1 -->|LDAP 同步| AD[Active Directory]
    end

    subgraph "CIAM 流程"
        User2[终端用户] -->|自助注册| IDP2[CIAM 平台<br/>Auth0 / Logto / Cognito]
        IDP2 -->|社交登录| Social[Google/GitHub/微信]
        IDP2 -->|同意管理| Consent[GDPR 合规]
        IDP2 -->|用户画像| Profile[偏好/行为数据]
        IDP2 -->|OIDC Token| App2[面向客户的应用]
    end

Workforce IAM 的典型数据流:HR 系统是权威源 → 自动创建/更新/禁用账号 → 同步到下游应用。流程由公司控制,用户没有选择权。

CIAM 的典型数据流:用户自助注册是入口 → 用户可以管理自己的资料、同意偏好、删除账号。流程由用户控制,公司必须遵守隐私法规。

功能需求对比

注册与入职

需求Workforce IAMCIAM
账号创建方式管理员创建 / HR 系统自动同步用户自助注册(邮箱、手机、社交登录)
邀请机制IT 发送临时密码邮箱验证链接 / 魔法链接
批量导入CSV/SCIM 批量导入不需要(用户自己注册)

认证

需求Workforce IAMCIAM
SSO核心需求,企业应用统一登录不需要(客户不关心你的内部应用)
MFA强制(TOTP/WebAuthn)可选,逐步推进(Passkey 是趋势)
社交登录通常不需要核心需求(降低注册摩擦)
无密码WebAuthn + 证书Passkey + 魔法链接 + 短信验证码

授权与权限

需求Workforce IAMCIAM
权限模型RBAC + 组织角色映射资源级权限 + 自助共享
管理员指派IT 或部门负责人分配角色用户自行管理(如 Google Drive 分享)
细粒度控制按部门/项目/职能分层按用户/资源/操作(ReBAC 更合适)

目录与用户管理

需求Workforce IAMCIAM
用户画像工号、部门、职位、汇报线偏好、行为、消费记录
数据量级数千到数十万百万到亿级
数据模型扁平组织树灵活的自定义属性 + 社交图谱

合规与隐私

需求Workforce IAMCIAM
核心法规等保 2.0、SOX、ISO 27001GDPR、CCPA、PIPL
同意管理不需要(雇佣关系)必须(用户明确同意数据处理)
数据删除权离职即删(公司决定)用户有权请求删除(被遗忘权)
审计要求管理员操作审计、权限变更记录用户同意记录、数据处理目的

技术选型差异

  flowchart TD
    Start[我要做身份系统] --> Q1{管理的用户是谁?}
    
    Q1 -->|公司员工| W1{规模多大?}
    Q1 -->|外部客户/用户| C1{用户量级别?}
    
    W1 -->|<500 人| W2[Keycloak 单节点<br/>或 Entra ID Free]
    W1 -->|500-5000 人| W3[Keycloak 集群<br/>或 Okta Workforce]
    W1 -->|>5000 人| W4[Okta/Entra ID<br/>企业级方案]
    
    C1 -->|<10 万用户| C2[Auth0 / Logto<br/>Keycloak 多 Realm]
    C1 -->|10 万-100 万| C3[Amazon Cognito<br/>或 Auth0 Enterprise]
    C1 -->|>100 万| C4[自建 CIAM<br/>或 Auth0/Azure AD B2C<br/>企业级]
    
    W2 --> W5[集成 AD/LDAP<br/>SCIM 自动供应<br/>强制 MFA]
    W3 --> W5
    W4 --> W5
    
    C2 --> C6[社交登录<br/>Passkey<br/>GDPR 同意管理]
    C3 --> C6
    C4 --> C6

关键决策点:

  • 员工 <500 人 + 已有 AD:Keycloak 对接 AD 是最经济的方案
  • 员工 >5000 人 + 混合办公:考虑 Okta/Entra ID 的全托管服务,减轻运维压力
  • 客户 <10 万 + 快速上线:Auth0 或 Logto 的免费 tier 足够用
  • 客户 >100 万 + 成本敏感:自建 Keycloak 多 Realm + 外部数据库,但需要投入运维人力

混合场景:同时服务员工和客户

现实中最常见的困境是:公司既有内部员工系统,又有面向客户的产品,身份需求是两套。

方案 A:两套独立系统(推荐)

┌──────────────────┐     ┌──────────────────┐
│  Keycloak        │     │  Auth0 / Logto   │
│  (员工身份)      │     │  (客户身份)      │
│  · 对接 AD/LDAP  │     │  · 社交登录      │
│  · 强制 MFA      │     │  · Passkey       │
│  · SCIM 供应     │     │  · GDPR 合规     │
└────────┬─────────┘     └────────┬─────────┘
         │                        │
         ▼                        ▼
    内部应用                  面向客户的应用

优点:需求明确分离,不会互相污染;出问题影响范围可控。 缺点:两套系统需要独立运维;员工访问客户数据时需要额外集成。

方案 B:单套系统 + 多 Realm/多租户

用 Keycloak 的不同 Realm 分别管理员工和客户:

Realm用途配置要点
employees企业内部员工对接 AD/LDAP、强制 MFA、关闭自助注册
customers外部客户开启注册、社交登录、GDPR 合规配置
partners合作伙伴B2B SSO、有限权限、访问时效控制

优点:一套运维体系,降低运维复杂度。 缺点:员工和客户的性能要求不同,共享基础设施可能出现资源竞争;CIAM 规模大到一定程度后独立部署更合理。

方案 C:OIDC Federation 桥接

用一套 CIAM 系统(如 Logto)面向客户,通过 OIDC Federation 连接到内部的 Keycloak 做员工认证:

客户 ──→ Logto(CIAM)──→ 面向客户的应用
                              │
员工 ──→ Keycloak ──→ 内部应用    │ (OIDC Federation)
                └─────────────────┘

这种方式适合需要统一 Token 格式但身份源分离的场景。

常见误区

误区 1:「用 Keycloak 就能同时搞定员工和客户」

Keycloak 确实可以,但默认设计偏向 Workforce IAM。CIAM 场景需要额外处理:高并发注册流程、GDPR 同意管理、用户自助删除账号、密码强度与客户体验的平衡。如果不做这些适配,直接拿 Keycloak 做 CIAM 会在合规和用户体验上出问题。

误区 2:「Auth0 比 Keycloak 更好做 CIAM」

Auth0 的 CIAM 能力确实强,但按 MAU(月活用户)计费——100 万 MAU 的价格足够雇一个团队维护 Keycloak。关键不是谁更好,而是你的用户规模和预算决定选谁。

误区 3:「CIAM 就是加个注册页面」

CIAM 的核心不是注册,是用户生命周期的自主管理:用户要能改资料、删账号、导出数据、管理同意偏好——这些 GDPR/CCPA 的要求不是「加个注册页面」能解决的。

常见问题(FAQ)

Q1:「CIAM 和 IAM 到底是什么关系?」

IAM 是总称(身份与访问管理),包含了 Workforce IAM(管员工)和 CIAM(管客户)。就像「交通工具」包含「卡车」和「轿车」——用途不同,但都属于同一大类。

Q2:「小公司(<50 人)需要区分这两套吗?」

不需要。直接用一个 IdP(Keycloak/Auth0/Logto)同时管员工和早期用户。等客户量级到 10 万+ 或合规需求出现时再拆分。早期过度设计只会拖慢速度。

Q3:「B2B SaaS 的身份算哪种 IAM?」

典型混合场景。你的直接客户(购买方 IT 管理员)需要企业 SSO 对接(更像 Workforce IAM 的 SAML/OIDC Federation),而客户公司的终端用户需要自助注册(更像 CIAM)。B2B SaaS 的身份层是 CIAM + Federation 的叠加。

Q4:「等保 2.0 对 CIAM 有什么要求?」

等保 2.0 主要针对企业内部系统(Workforce IAM)。CIAM 场景(面向公众的服务)适用《个人信息保护法》(PIPL)和《数据安全法》,不强制等保定级。但如果客户数据落入内部系统,整套内部系统需要按等保标准保护。

Q5:「从自建用户表迁移到 CIAM 平台有什么坑?」

最大坑是密码哈希迁移——老系统用 MD5/SHA1 哈希,新系统必须在不要求用户重新设置密码的前提下平滑升级。标准做法是:保留老哈希格式标记 → 用户下次登录时用老算法验证 → 通过后用新算法重新哈希存储。Auth0 的 custom database、Keycloak 的 custom User Storage SPI 都支持这种渐进式迁移。

参考资料