0%

基于 OAuth2/OIDC 协议的企业级统一身份治理架构实践

🌐 Language: English Version | 中文版

1. 架构场景与背景分析

在多业务系统并行的企业环境(如 OA、CRM、项目管理、财务等),集中化的身份治理是解决数据孤岛的关键。常见挑战包括:

  • 准入逻辑分散:各业务系统独立实现准入,策略变更导致多点重构。
  • 身份标识不一:不同服务对同一用户的标识规则(Email、Subject ID)冲突。
  • 属性管理重复:组织架构在多处副本,缺乏单一事实来源。

成熟的身份源(Upstream IdP)主要负责解决身份真实性断言。本架构基于标准 OAuth2/OIDC 协议构建了身份中继层(Identity Relay Layer),实现了跨系统的统一准入决策与身份画像汇聚。


2. 逻辑架构设计

架构核心原则:上游身份提供商 (Upstream IdP) 负责身份真实性,内部身份系统负责准入判定与属性分发。

2.1 架构全景图

graph TB
    subgraph U["用户层"]
        EU["企业员工"]
        AD["系统管理员"]
    end

    subgraph A["外部身份源 (Upstream IdP)"]
        IDP["OIDC Provider"]
    end

    subgraph I["身份治理层 (Internal IAM)"]
        IAS["Identity Access Service (IAS) - 准入决策引擎 + 会话管理"]
        IMA["Identity Management API (IMA) - 读写管理后台"]
        IDS["Identity Data Service (IDS) - 身份画像查询 (只读)"]
        ISJ["Identity Sync Job (ISJ) - 镜像数据同步"]
    end

    subgraph G["API 网关层"]
        GW["API Gateway - 身份透传 + 统一鉴权"]
    end

    subgraph B["业务系统层"]
        APP1["业务系统 A"]
        APP2["业务系统 B"]
        APP3["业务系统 C"]
    end

    EU -->|OIDC SSO| IDP
    EU -.->|OIDC SSO| IAS
    IDP -->|OIDC Federation| IAS
    AD -->|Email/Password| IAS

    IAS -->|签发内部标准 JWT| GW
    GW -->|Header 注入 X-User-Id| APP1
    GW -->|Header 注入| APP2
    GW -->|Header 注入| APP3

    APP1 -->|查询用户画像| IDS
    APP2 -->|查询用户画像| IDS
    APP3 -->|查询用户画像| IDS

    IMA -.->|配置分发| IAS
    ISJ -->|增量同步| IDP

2.2 交互流分析 (Identity Flows)

A. 联合登录流程 (OIDC Federation)

此流程实现了基于标准 OAuth2 协议的身份中继,支持任意标准 OIDC Provider 的无缝接入:

sequenceDiagram
    participant Browser as 用户浏览器
    participant GW as API Gateway
    participant IAS as Identity Access Service (IAS)
    participant IdP as Upstream IdP

    Browser->>GW: 访问受限系统 URL
    GW->>IAS: Forward-Auth (JWT 校验)
    IAS-->>GW: 未认证 (302 Redirect)
    GW-->>Browser: 302 → 进入登录页
    Browser->>IAS: 选择 "企业账号登录"
    IAS-->>Browser: 302 → 跳转至上游 IdP
    Browser->>IdP: 提交身份断言 (MFA/SSO)
    IdP-->>Browser: 回调 IAS (Authorization Code)
    Browser->>IAS: /oauth2/callback?code=xxxx
    IAS->>IdP: 用 Code 换取 Token & UserInfo
    IAS->>IAS: 内部身份汇聚 (Ext ID → UID)
    IAS->>IAS: 创建 Session (SID)
    IAS-->>Browser: 签发内部 JWT (含 UID, SID) + 写 Auth Cookie
    Browser->>GW: 带 JWT 重新访问
    GW->>IAS: Forward-Auth 判定通过
    GW->>Browser: 转发至下游业务系统

B. 透明鉴权与准入流 (Decision Engine)

网关层通过准入引擎执行实时的精细化管控:

sequenceDiagram
    participant Browser as 用户浏览器
    participant GW as API Gateway
    participant IAS as Identity Access Service (IAS)
    participant Backend as 业务系统

    Browser->>GW: 带 JWT 访问业务 API
    GW->>IAS: Forward-Auth 调用
    IAS->>IAS: 1. JWT 签名校验
    IAS->>IAS: 2. 权限版本校验 (Permission Consistency)
    IAS->>IAS: 3. 活跃会话校验 (Check SID in Cache)
    IAS->>IAS: 4. 应用级准入判定 (Access Level Check)
    alt 准入成功
        IAS-->>GW: 200 OK + Header (X-User-Id, X-Sid)
        GW->>Backend: 映射身份上下文请求业务
        Backend-->>Browser: 返回数据
    else 准入拒绝
        IAS-->>GW: 403 Forbidden
        GW-->>Browser: 403 Forbidden
    end

3. 关键设计决策 (Rationale)

3.1 准入控制与业务权限的「解耦边界」

  • 准入控制(Access Control):由身份系统决定该用户是否有权进入此应用。
  • 功能权限(Feature Permission):应用内部通过 IAM 提供的属性自行判定。

决策依据:在本架构设计中,身份系统作为 Attribute Provider(属性提供者),而让业务系统保持 Rule Definer(规则定义者) 的角色,以防止中央身份系统过度侵入业务细节。

3.2 选型思路:协议中立性

架构选择 Spring Authorization Server 构建 IAS 核心:

  • 优势:其纯净的 OAuth2 实现支持将任何第三方 Identity Provider 抽象为「身份源」。
  • 横向对比:相较于 Keycloak,它提供了更灵活的 API 级扩展,便于插入自定义的「准入决策链」。

3.3 无状态与有状态的平衡 (SID 设计)

为支持「即时撤回权限」和「全局注销」:

  • 设计点:在 JWT 中嵌入 Session ID (SID),由后端 Redis 集群维护。
  • 决策依据:OAuth2 协议本身不包含会话失效语义,此处通过 SID 机制补充了实时会话注销能力,以此满足企业级的管理精度需求。

3.4 权限即时生效:版本一致性校验

为了实现变更的「分钟级响应」:

  1. 用户与权限的映射持有 permission_version
  2. 网关准入时进行版本匹配校验。
  3. 一旦管理员修改准入策略,版本号递增,促使所有活跃 Token 即刻失效,从而触发重新鉴权逻辑。

4. 身份汇聚:UID 驱动的统一画像

架构通过「身份联合转换」将异构账户标识转换为全局唯一的 UID

1
2
3
4
5
6
7
8
┌──────────────────────────────────────┐
│ 身份联合映射关系 │
├──────────┬─────────────┬─────────────┤
│ UID │ External ID │ Identity Type│
├──────────┼─────────────┼─────────────┤
│ 100 │ aaa111bbb.. │ OIDC_SUB/OID │ ← 主力联合身份
│ 100 │ user@domain │ EMAIL_PWD │ ← 容灾/备用身份
└──────────┴─────────────┴─────────────┘

设计的核心在于实现 IDP-Agnostic(身份源无关),确保上游账号的变更(如企业更名导致的 Email 域名变更)不会影响业务系统中的数据关联。


5. 协作边界规范

通过标准化协议明确身份治理系统与上游 IdP 的协作:

职责方 负责的核心能力
上游 IdP 身份断言 (Assertion)、MFA/SSO、生命周期同步 (HR 系统集成)
内部治理层 准入决策、会话一致性管理、企业画像补全、全局操作审计

6. 实践小结

本架构旨在建立一套协议中立、职责清晰的身份治理桥梁:

  1. 协议中立:基于标准协议,不绑定特定供应商,可对接任意 OIDC Provider。
  2. 治理一致:通过网关注入实现身份的全局可信分发。
  3. 管理可控:通过 SID 和版本机制,将无状态协议的灵活性与有状态管理的安全性结合。