架构图是软件系统的蓝图。它们将抽象的逻辑转化为团队可以理解、讨论并在此基础上构建的视觉结构。

快速要点:本指南提供了实用且与工具无关的策略,用于在C4组件视图中表示认证逻辑,帮助团队以清晰、精确且长期可维护的方式记录安全关键流程。
🧩 理解C4模型的背景
C4模型将架构文档组织为四个逐步抽象的层次:
| 层级 | 关注点 | 典型受众 |
|---|---|---|
| 系统上下文 | 系统作为一个单一的方框,以及与人员/外部系统的关联 | 高管、利益相关者 |
| 容器 | 高层次的软件容器(Web应用、API、数据库、移动应用) | 架构师、DevOps人员 |
| 组件 | 紧密的职能单元容器内部容器 | 开发人员、安全工程师 |
| 代码 | 类、接口和内部结构 | 实现功能的开发人员 |
认证逻辑至关重要,因此必须在以下两个层级上予以关注:容器层和组件层。虽然容器视图可能展示认证端点的存在位置,但组件视图揭示了凭证如何被处理、验证和保护的内部机制。在哪里认证端点存在的位置,组件视图揭示了内部机制凭证被处理、验证和保护的方式。
💡 专业提示: 从第1层(系统上下文)开始,逐层向下推进——这能确保你的组件图始终基于业务上下文 [[2]]。
🔍 为何使用组件视图来描述认证?
组件视图在记录认证时达到了理想的平衡:粒度足够细,能够揭示安全逻辑,同时抽象程度足够高,便于维护。
主要优势:
| 优势 | 对认证的意义 |
|---|---|
| 逻辑可见性 | 揭示处理登录、令牌生成和会话验证的服务 |
| 交互清晰性 | 明确前端 ↔ 后端安全服务之间的通信 |
| 边界定义 | 明确标记可信系统边界与外部依赖关系 |
| 安全审计 | 为威胁建模和合规审查提供参考 |
在记录认证时,你不仅仅是画框框——你实际上是在记录敏感数据的流动过程。一个精心设计的组件图能减少关于秘密存储位置、传输方式以及谁可以访问它们的歧义。
🎯 最佳实践: 每张图的范围限制在6到12个组件之间。如果认证系统较为复杂,可创建聚焦的子视图(例如“认证切片”)[[1]]。
📦 定义认证组件
为了有效可视化认证,应根据 功能来识别不同的组件,而非实现方式。
核心身份组件
| 组件 | 职责 | 典型交互 |
|---|---|---|
| 身份提供者 | 颁发凭证/令牌(外部或内部) | OAuth 重定向,令牌发放 |
| 认证服务 | 验证凭据(密码哈希,多因素认证) | 查询用户存储,向会话管理器发送信号 |
| 会话管理器 | 创建、维护和销毁用户会话 | 读取/写入会话状态,与缓存集成 |
| 令牌存储 | 刷新令牌和黑名单的存储库 | 验证令牌撤销,支持轮换 |
| 用户凭据存储 | 用于哈希密码和用户资料数据的安全存储 | 在登录期间由认证服务查询 |
外部依赖:视觉表示指南
| 组件类型 | 图表表示 | 示例标签 |
|---|---|---|
| 外部系统 | 带有“外部”边框/图标矩形 | 身份提供商(Auth0) |
| 数据库 | 圆柱形 | 用户凭据存储(PostgreSQL) |
| API 端点 | 带箭头指示的盒子 | POST /auth/login |
| 密钥管理器 | 带锁的盒子图标 | Vault / AWS 密钥管理器 |
⚠️ 关键: 始终显示外部身份源——即使是 Auth0 或 Okta 等第三方提供商——以明确信任边界 [[28]]。
🔄 可视化特定的身份验证流程
静态图示展示结构;流程增加动态上下文。使用带方向、带标签的箭头来表示请求/响应。
1️⃣ 登录流程(基于凭据)
[前端] --POST /login--> [认证服务]
[认证服务] --查询--> [用户凭据存储]
[用户凭据存储] --返回哈希值--> [认证服务]
[认证服务] --验证--> [认证服务]
[认证服务] --创建会话--> [会话管理器]
[会话管理器] --返回会话ID--> [前端]
图示标签:
-
箭头:
POST /login,验证哈希值(bcrypt),创建会话 -
数据备注:
密码(传输中加密),会话ID(HTTP-only Cookie)
2️⃣ 基于令牌的身份验证(JWT)
[前端] --POST /login--> [认证服务]
[认证服务] --生成JWT--> [令牌生成器]
[认证服务] --返回JWT--> [前端]
[前端] --GET /api/data + JWT--> [API网关]
[API网关] --验证签名--> [令牌验证器]
[令牌验证器] --允许/拒绝--> [API网关]
视觉约定:
-
使用虚线箭头表示令牌传输(客户端持有的凭据)
-
标记验证步骤:
验证 RS256 签名,检查过期时间 -
区分 初始认证 与 后续受保护的请求
3️⃣ OAuth 2.0 流程(第三方集成)
[前端] -重定向-> [身份提供商(外部)]
[身份提供商] -用户认证-> [身份提供商]
[身份提供商] -回调 + 授权码-> [前端]
[前端] -POST /token + 码-> [认证服务]
[认证服务] -交换码-> [身份提供商]
[身份提供商] -返回访问令牌-> [认证服务]
[认证服务] -颁发会话-> [前端]
图表提示:
-
将身份提供商表示为一个 外部组件 并使用独特的边框样式
-
绘制一个 循环箭头 用于重定向/回调循环
-
清晰标注:
授权码,令牌交换,作用域:read:user
4️⃣ 多因素认证(MFA)
[前端] --POST /login--> [认证服务]
[认证服务] --验证密码--> [用户凭证存储]
[认证服务] --需要MFA?--> {决策节点}
{决策节点} --是--> [MFA组件]
[MFA组件] --发送验证码--> [邮件/SMS服务]
[前端] --POST /mfa/verify + 验证码--> [MFA组件]
[MFA组件] --验证--> [认证服务]
[认证服务] --创建会话--> [会话管理器]
视觉最佳实践:
-
使用一个 菱形决策节点 用于条件性MFA逻辑
-
对敏感路径进行颜色编码(例如,MFA 验证使用红色)
-
在 MFA 令牌上包含超时/过期说明
🔒 图表中的安全考虑
图表是一张地图,代表的是信任,而不仅仅是数据。明确标记安全边界。
加密与传输安全
| 连接类型 | 视觉指示符 | 标签示例 |
|---|---|---|
| 传输中(内部) | 锁图标 + 实线 | TLS 1.3 |
| 传输中(外部) | 锁图标 + 虚线 | HTTPS + mTLS |
| 静态(数据库) | 带锁图标的圆柱体 | AES-256 加密 |
✅ 规则:所有跨越信任边界的箭头必须显示加密指示符。
密钥管理可视化
| 密钥类型 | 推荐的图表表示方式 |
|---|---|
| API 密钥 / 客户端密钥 | 链接至密钥管理器组件 |
| 数据库凭据 | 注意:在运行时通过环境变量注入 |
| JWT 签名密钥 | 显示为密钥管理服务依赖项 |
| 永远不要 | 组件框中的硬编码值 |
🚫 反模式:避免暗示密钥存在于代码中。使用通用的
配置源组件,如果注入细节是特定于实现的。
🛑 需要避免的常见陷阱
| 陷阱 | 为何存在问题 | 修正 |
|---|---|---|
通用标签 ("处理", "处理") |
掩盖了安全关键操作 | 使用精确的动词:"验证 JWT 签名", "哈希密码(argon2)" |
| 缺少外部依赖 | 造成自我封闭的错误感觉 | 始终显示身份提供商、电子邮件服务等 |
| 忽略令牌生命周期 | 忽略刷新/撤销逻辑 | 包含 令牌刷新 和 黑名单检查 流程 |
| 过度设计视图 | 降低可读性和可维护性 | 保持组件视图聚焦于 逻辑;将类的详细信息移至代码视图 [[5]] |
| 符号不一致 | 使不同图表间的读者感到困惑 | 记录并执行团队风格指南 [[3]] |
📝 可维护文档的最佳实践
-
标准化符号
在共享图例中定义箭头样式、图标和颜色含义。一致性可降低认知负荷 [[4]]。 -
将图表视为代码
将图表存储在版本控制系统中(例如,PlantUML、Structurizr DSL)。将变更与认证逻辑更新一并追踪 [[24]]。 -
与审查流程集成
在修改认证流程的PR中要求更新图表。“代码变更,图表也应变更。” -
突出信任边界
使用粗边框或背景着色来标记系统信任结束的位置。这有助于威胁建模 [[14]]。 -
谨慎且语义化地使用颜色
将颜色保留用于安全状态:-
🔴 红色:敏感数据 / 高风险操作
-
🟢 绿色:公共端点 / 低风险
-
🔵 蓝色:内部可信通信
避免仅使用颜色作为区分标志(可访问性)唯一区分标志(可访问性)。
-
-
包含“最后更新”时间戳
认证要求变化迅速。时间戳表明图表的新鲜度。
🧠 详细流程示例
示例 1:用户注册流程
[前端] --POST /register--> [注册组件]
[注册组件] --验证格式--> [验证规则]
[注册组件] --检查唯一性--> [用户凭证存储]
[注册组件] --哈希密码--> [密码哈希器(argon2)]
[注册组件] --写入用户记录--> [用户凭证存储]
[注册组件] --发送验证邮件--> [邮件服务(外部)]
[邮件服务] --用户点击链接--> [验证端点]
[验证端点] --激活账户--> [用户凭证存储]
关键图表说明:
-
显示
邮件服务作为外部组件——明确异步依赖关系 -
标注哈希算法:对安全审计至关重要
-
如果验证规则复杂,应将其作为独立组件(例如:密码策略引擎)
示例 2:带轮换的令牌刷新
[前端] --POST /refresh + refresh_token--> [认证服务]
[认证服务] --验证签名--> [令牌验证器]
[认证服务] --检查吊销状态--> [令牌存储(黑名单)]
[认证服务] --生成新令牌--> [令牌生成器]
[认证服务] --使旧的刷新令牌失效--> [令牌存储]
[认证服务] --返回新的访问令牌 + 刷新令牌--> [前端]
安全要点:
-
明确展示令牌轮换(旧的刷新令牌被失效)
-
标注吊销检查:防止重放攻击
-
在组件描述中注明令牌过期时间
示例 3:会话失效(登出)
[前端] --POST /logout + session_id--> [会话管理器]
[会话管理器] --添加到黑名单--> [令牌存储]
[会话管理器] --删除会话数据--> [会话缓存(Redis)]
[会话管理器] --确认终止--> [前端]
[API 网关] --后续请求 + 黑名单令牌--> [令牌验证器]
[令牌验证器] --拒绝--> [API 网关] --401 未授权--> [前端]
为何如此重要:
可视化服务器端清理可以防止“登出仅限客户端”的误解。这对于防范令牌被盗至关重要。
📊 比较认证策略:图表关注指南
| 策略 | 主要图表关注点 | 需要突出的关键组件 | 视觉提示 |
|---|---|---|---|
| 基于会话的 | 服务器端状态管理 | 会话存储 (Redis/数据库) |
实线箭头表示会话查找 |
| 基于令牌的(JWT) | 加密验证 | 令牌验证器 + 密钥管理器 |
虚线箭头表示令牌传输 |
| OAuth 2.0 / OIDC | 重定向/回调编排 | 身份提供商(外部) |
循环箭头表示授权码流程 |
| 无密码(WebAuthn) | 挑战/响应协议 | 认证器认证服务 |
硬件密钥/生物特征的图标 |
🔍 专业洞察:现在,AI驱动的工具可以从自然语言描述中自动生成C4图表,自动遵循模型规范[[7]]。建议利用这些工具制作初稿,但始终要审查其安全性准确性。
🚀 结论:可视化作为安全实践
可视化认证流程超越了美学——它是一种安全沟通纪律通过将图表锚定在C4组件视图中,您将创建动态文档,其作用是:
-
✅ 开发者:清晰的实现指导
-
✅ 安全工程师:可审计的信任边界
-
✅ 新员工:加速入职
-
✅ 事件响应人员:在安全事件中快速获取上下文
发布图表前的最终检查清单:
-
每个跨越信任边界的箭头是否都显示了加密?
-
秘密是否从未被暗示存在于代码中?
-
外部依赖是否明确标记?
-
该图表是否反映了 当前的认证逻辑(而非遗留)?
-
是否有版本/时间戳以确保可追溯性?
🌟 请记住:当你绘制连接线时,请问自己:“这是否代表一个可信通道?”当你绘制一个框时,请问自己:“这个组件是否处理敏感数据?”这些问题将图表从静态的产物转变为积极的安全工具。
通过采用这些实践,您的架构文档将成为一个主动资产——促进安全意识,减少误解,并确保随着系统的发展,您的认证流程始终保持稳健、清晰且易于维护。
📚 参考列表
- Visual Paradigm 的 C4 图表工具——轻松可视化软件架构:此资源突出介绍了一款工具,使软件架构师能够使用 C4 建模技术创建清晰、可扩展且易于维护的系统图表。
- 使用 Visual Paradigm AI 工具进行 C4 模型可视化的终极指南:本指南解释了如何利用人工智能自动化并增强 C4 模型的可视化,以实现更智能的架构设计。
- 利用 Visual Paradigm 的 AI C4 Studio 实现架构文档的简化:对 AI 增强型 C4 Studio 的探索,该工具使团队能够创建清晰、可扩展且高度可维护的软件架构文档。
- C4 模型图表入门指南:一个分步教程,旨在帮助初学者在四个抽象层次(上下文、容器、组件和代码)上创建 C4 模型图表。
- C4-PlantUML Studio 终极指南:革新软件架构设计:本文讨论了人工智能驱动的自动化与 PlantUML 的灵活性相结合,以简化软件架构设计流程。
- Visual Paradigm AI 驱动的 C4 PlantUML Studio 全面指南:一份详细指南,解释了该专业工作室如何将自然语言转化为准确、分层的 C4 图表。
- C4-PlantUML Studio:AI 驱动的 C4 图表生成器:此功能概述描述了一款 AI 工具,可直接从简单的文本描述自动生成 C4 软件架构图表。
- 全面教程:使用 AI 聊天机器人生成和修改 C4 组件图表:一个实践教程,演示如何通过一个真实案例研究,使用 AI 驱动的聊天机器人生成并优化 C4 组件图表。
- Visual Paradigm 全面支持 C4 模型发布:官方公告,宣布平台内全面支持 C4 模型,用于在多个抽象层次上管理架构图表。
- C4 模型 AI 生成器:为 DevOps 和云团队自动化图表:本文讨论了对话式 AI 提示如何自动化完整的 C4 建模生命周期,确保技术团队的一致性和效率。











