第1章 课程全景:传递与模块隔离的全局架构蓝图
1.1 架构蓝图总览:从“孤岛防御”到“链路信任”
现代分布式系统面临的核心矛盾是:模块必须在隔离中运行,但业务又要求在模块间安全传递身份与权限。本章全景图描绘了由API网关、授权服务、业务模块群(A/B/C)构成的典型拓扑。不再是简单的密钥,而是承载了模块边界定义、信任锚点和授权策略的可信凭证。
架构设计意图:本蓝图采用“网关前置验证 + 模块内部隔离授权”的双层模型。外层网关负责完整性校验和内省( Introspection),内层各模块通过本地策略引擎完成细粒度授权,实现“一次验证,多层授权”的安全模型。
章节关联矩阵(本课程核心知识点在第1章中的位置)
| 课程核心要素 | 第1章映射 | 落地关注点 |
|---|---|---|
| 模块边界定义 | 服务群(A/B/C)之间的物理与逻辑边界 | 边界由统一身份域名和受众(aud)声明界定 |
| 信任链路设计 | 网关→授权服务→模块集群的链式信任传递 | 信任锚点锚定在授权服务公钥;模块间不互信 |
| 传递机制 | Bearer 在HTTP Header中的端到端传递 | 需携带模块标识(sub)和授权上下文(ctx) |
| 授权策略分层 | 网关级(粗粒度) + 模块级(细粒度) | 网关仅校验是否有效;模块判断权限粒度 |
| 数据流与控制流分离 | 在控制流路径传递,数据流直连 | 不参与数据负载加密,仅作为授权凭证 |
| 方案权衡 | 集中式验证 vs 分布式验证 | 集中式降低模块复杂度;分布式提升性能和可用性 |
| 风险识别 | 伪造、重放、泄漏 | 引入CWT/JWT格式标准 + 短期有效 + HTTPS传输 |
1.2 核心角色定义与交互关系
架构中的五个核心角色及其职责如下表所示。每个角色在传递和授权流程中承担不可替代的职责。
| 角色名称 | 符号 | 职责 | 与交互 |
|---|---|---|---|
| 颁发者 | P | 签发、续签、撤销 | 生成并绑定用户身份与模块权限集 |
| 承载者 | C | 持有并请求资源 | 在Authorization头携带Bearer |
| 网关验证者 | G | 内省、签名验证、缓存元数据 | 校验签名、过期时间(exp)和颁发者(iss) |
| 模块授权者 | Mi | 基于载荷做本地授权决策 | 解析中的权限声明(perm)和上下文(ctx) |
| 审计日志 | L | 记录传递和授权事件 | 接收授权成功/失败的回调;存储摘要 |
1.3 典型场景拆解:微服务间调用与事件驱动
-
场景一:微服务间同步调用(请求-响应)
客户端C携带向网关G请求模块A的资源。G做内省后,将原始透传到模块A。模块A解析获取用户ID和权限集,执行授权决策。关键约束:在模块间传递时,受众(aud)声明必须包含目标模块标识,防止被跨域滥用。 -
场景二:API网关向下游模块传递
网关G将作为Bearer凭证注入到HTTP Authorization头中,下游模块直接提取。网关还需传递追踪ID(trace_id)协助审计日志关联。典型请求范例如下:GET /v1/resource HTTP/1.1
Host: module-a.internal
Authorization: Bearer eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...
X-Trace-Id: a1b2c3d4e5f6 -
场景三:事件驱动架构中的传递
在消息队列(如Kafka)场景下,不能直接嵌入消息体。替代方案是:生产者将摘要(SHA-256)写入消息Header,消费者依靠网关或缓存服务补全完整。此设计确保消息持久化时不泄漏明文,满足数据流与控制流分离原则。
⚠ 常见风险与防范
- 泄漏风险:在日志或消息队列中明文暴露。防范:日志中脱敏的前8位和后4位,消息队列中仅传递摘要。
- 信任链断裂:模块自行签发或忽略验证。防范:强制所有模块依赖网关传递的,且验证的iss和aud字段。
- 授权策略遗漏:网关级放行后模块级未执行细粒度检查。防范:实施“双重验证”策略,模块级必须对每个API端点执行权限检查。
1.4 方案权衡:集中式 vs 分布式授权
| 维度 | 集中式授权(网关决策) | 分布式授权(各模块决策) |
|---|---|---|
| 性能 | 较高:网关需批量缓存元数据 | 低:每个模块独立缓存元数据 |
| 安全 | 较低:网关成为单点信任锚 | 较高:即使网关被攻破,模块仍可独立防御 |
| 运维 | 简单:授权规则统一管理 | 复杂:各模块需部署独立策略引擎 |
| 可扩展性 | 受限:网关可能成为瓶颈 | 良好:授权决策横向扩展 |
| 适用场景 | 小型集群(模块数<10) | 大型集群(模块数≥10)或跨信任域场景 |
1.5 落地步骤要点
课程后续章节将逐一展开,但在此画出关键里程碑:
- 定义模块边界:为每个模块分配全局唯一的身份标识(如URN:module:XXX)。
- 设计结构:包含iss、sub、aud、exp、perm(权限列表)、ctx(上下文)六个核心声明。
- 配置网关内省端点:集成授权服务的内省API,设置缓存过期时间与无效拒绝策略。
- 部署模块级策略引擎:在每个模块入口植入轻量级授权过滤器,解析中的perm字段。
- 实施审计对接:网关和模块共同向审计日志发送摘要、用户ID、决策结果和时间戳。
1.6 验收标准(第1章对应部分)
- 蓝图覆盖:架构图囊括客户端、网关、授权服务、模块群、审计日志五个核心角色。
- 交互规范:传递路径明确(客户端→网关→模块),控制流与数据流分离。
- 策略分层:文档清晰定义网关级粗粒度授权和模块级细粒度授权的区别。
- 风险清单:列出泄漏、信任链断裂、策略遗漏三条主要风险及其防范措施。
本课程设计说明:第1章建立了全局架构蓝图与核心角色定义。第2章将深入“模块边界定义”子章节,讲解如何通过统一身份空间和受众声明实现严格的边界隔离。请基于本蓝图继续后续学习。