企业身份与 HR 联动
Passport 的账号体系同时覆盖两类身份场景:个人身份(C 端用户自助注册)与企业身份(由组织管理,员工无法自行注册)。企业账号通过与 HR 系统联动自动维护入职、转岗、离职生命周期,离职后其所有登录凭据立即失效。
身份模型
| 概念 | 说明 |
|---|---|
| 身份(passport_user) | 「一个人」的锚点,一人一条。个人身份与企业身份最终都归属到同一个人 |
| 个人账号 | 住平台租户(租户 ID 为 0),自助注册,全局唯一登录名 |
| 企业账号 | 住企业租户,登录名租户内唯一,由管理员创建或 HR 同步产生,不可自助注册 |
同一个人可以同时持有个人账号与多个企业账号(例如既是某产品的 C 端用户、又是某公司的员工),这些账号通过身份层关联到同一个人。当员工用企业邮箱自助注册过个人账号时,激活企业账号会自动归并到既有身份,个人资料随之共享。
企业账号生命周期
HR 同步入职(直接激活)/ 管理员创建
PENDING ────────────────────────────────▶ ACTIVE
│ 员工首登:企业邮箱验证码 + 设置密码 │
│ ▼
└──── DISABLED ◀──── HR 离职 / 管理员停用 ──┘
(登录凭据立即失效;复职后恢复)
| 状态 | 含义 | 能否登录 |
|---|---|---|
| 待激活(PENDING) | 账号已创建但员工尚未设置密码 | 否 |
| 已启用(ACTIVE) | 正常使用中 | 是 |
| 已停用(DISABLED) | 已离职或被管理员停用 | 否 |
员工侧:激活企业账号
HR 同步或管理员创建的账号初始为「待激活」,员工按以下步骤激活:
- 访问 Passport 登录页,进入「激活企业账号」页面(
/activation) - 输入企业邮箱,获取验证码(验证码 5 分钟内有效)
- 输入验证码并设置密码(8 ~ 30 位)
- 激活成功后即可正常登录
未激活的账号尝试登录会提示 Account pending activation,需先完成激活。
管理员侧:创建企业账号
- 进入「账号」页面,切换到「企业账号」标签
- 点击「创建账号」,填写用户 ID、用户名、邮箱等信息
- 账号默认「已启用」;若希望员工自行激活,可随后将其停用再改为待激活,或直接由 HR 同步管理
HR 系统联动
HR 系统是企业身份的唯一权威来源,Passport 是消费方。同步按工号幂等,可反复执行:
| HR 事件 | Passport 行为 |
|---|---|
| 入职 | 创建企业账号(默认待激活,可配置为直接激活) |
| 转岗 / 调岗 | 更新姓名、邮箱与部门(群组)归属 |
| 离职 | 账号停用 + 全部登录凭据立即失效 |
| 复职 | 恢复为已启用,保留历史账号 |
字段映射
| HR 字段 | Passport 落点 | 说明 |
|---|---|---|
| 工号(employeeId) | 账号 external_id | 同步幂等键 |
| 姓名(name) | 账号名称 | |
| 企业邮箱(email) | 账号邮箱 | 激活流程的验证渠道 |
| 部门(department) | 群组(passport_group) | 租户内按名称映射,不存在则自动创建 |
同步方式
| 方式 | 说明 | 现状 |
|---|---|---|
| 定时拉取(PULL) | Passport 每小时调用 HR 系统的员工列表接口做全量 diff | 已支持 |
| 事件推送(PUSH) | HR 系统在入转调离时回调 Passport | 即将支持 |
| SCIM 2.0 | 对接 AzureAD / Okta / 飞书 / 钉钉等身份平台 | 规划中 |
员工列表接口的返回格式约定为数组:
[
{
"employeeId": "10001",
"name": "张三",
"email": "zhangsan@corp.com",
"department": "研发部"
}
]
配置 HR 同步(管理员)
- 进入管理后台「HR 同步」页面
- 打开「启用同步」开关
- 填写员工列表 API 地址与鉴权请求头(如
Bearer ...,选填) - 按需开启「入职直接激活」——开启后同步入职的账号跳过激活流程直接可用(员工通过忘记密码流程设置密码)
- 点击「保存」;可随时点击「立即同步」验证效果,页面会显示新建 / 更新 / 离职停用的账号数与上次同步时间
同步仅在保存的租户范围内生效,不会触碰其他租户的账号。
离职即时生效
Passport 的登录 Token 是无状态 JWT,签名校验不查库。为保证离职即刻生效,账号被停用(HR 离职同步或管理员手动停用)时,Passport 会记录吊销时刻:
- 该账号签发于吊销时刻之前的所有 Token 立即被网关拒绝
- 复职后重新登录获得的 Token 不受影响
管理员在账号列表中通过状态开关停用企业账号,效果与 HR 离职同步一致。
企业应用访问控制(身份选择与拦截)
企业应用(归属某租户的应用)仅限该租户的企业身份访问,校验由 Passport 在单点登录入口统一完成(OAuth2 / OIDC / SAML authorize),各企业应用无需自行实现:
- 当前已是该租户的活跃企业账号 → 直接放行;
- 同一人以个人身份访问,但名下已有该租户的企业账号 → 展示身份选择页,确认后以企业身份重签 Token 并继续原来的跳转;
- 与租户无任何关系 → 展示拦截页("该应用仅限 XX 企业成员使用"),个人身份永远不会拿到企业租户数据。
邀请成员(管理员)
管理员可以把既有用户邀请为企业成员:
- 进入「账号」页面,切换到「企业账号」标签
- 点击「邀请成员」,输入受邀人邮箱
- 系统生成一条接受链接(7 天内有效),由管理员把链接发给对方
- 受邀人打开链接后,Passport 自动在其名下创建该租户的企业账号(待激活)并发送验证码
- 受邀人完成激活流程即可访问企业应用