安全架构基本原则
文档编号: SYS-TR-AR-004
版本: 1.0
日期: 2026-03-10
编制: 系统架构师
审核: 审核通过 ✅
1. 安全目标
系统平台安全架构设计遵循以下原则:
- 机密性:保护敏感数据不被未授权访问
- 完整性:确保数据不被非法篡改
- 可用性:保障系统持续稳定运行
- 可追溯性:所有操作可审计、可追溯
2. 安全架构分层
┌─────────────────────────────────────────────────────────────┐
│ 应用安全层 │
│ XSS防护 / CSRF防护 / SQL注入防护 / 文件上传安全 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 认证授权层 │
│ 身份认证 / 权限控制 / 会话管理 / JWT令牌 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 传输安全层 │
│ HTTPS / TLS 1.3 / 证书管理 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 网络安全层 │
│ 防火墙 / VPN / 网络隔离 / DDoS防护 │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 数据安全层 │
│ 数据加密 / 脱敏 / 备份 / 审计日志 │
└─────────────────────────────────────────────────────────────┘3. 认证方案
3.1 认证流程
┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户 │────>│ 前端 │────>│ 后端 │────>│ 认证中心 │
│ │ │ (Vue) │ │(SpringBoot) │ │ (SpringAuth)│
└─────────┘ └─────────────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
│ │ │
│ ▼ ▼
│ ┌─────────────┐ ┌─────────────┐
│ │ Redis │ │ MySQL │
│ │ (会话缓存) │ │ (用户数据) │
│ └─────────────┘ └─────────────┘
│ │
│<────────JWT Token───────────────────│
│
│ ──(后续请求携带Token)──────────────>│
│ │
│<────────受保护资源───────────────────│3.2 认证机制
| 机制 | 说明 | 实现方案 |
|---|---|---|
| 用户名密码 | 基础认证 | BCrypt加密存储 |
| JWT令牌 | 无状态认证 | Access Token + Refresh Token |
| 双因素认证 | 增强安全 | 短信/邮箱验证码(可选) |
| 单点登录 | 多系统统一认证 | OAuth 2.0 + OIDC |
3.3 Token策略
java
// Access Token配置
有效期:30分钟
刷新阈值:5分钟(过期前5分钟可刷新)
// Refresh Token配置
有效期:7天
使用次数:单次使用(刷新后失效)
存储位置:HttpOnly Cookie
// Token内容
{
"sub": "user_id",
"username": "admin",
"roles": ["admin", "user"],
"iat": 1700000000,
"exp": 1700001800
}4. 授权方案
4.1 RBAC权限模型
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户 │<─────>│ 角色 │<─────>│ 权限 │
│ (User) │ N:M │ (Role) │ N:M │ (Permission)│
└─────────────┘ └─────────────┘ └─────────────┘
│
│
▼
┌─────────────┐
│ 部门 │
│ (Department)│
└─────────────┘4.2 权限类型
| 权限类型 | 说明 | 示例 |
|---|---|---|
| 菜单权限 | 页面访问权限 | 用户管理页面、角色管理页面 |
| 按钮权限 | 操作权限 | 新增用户、删除用户 |
| 数据权限 | 数据范围权限 | 本部门数据、全部数据 |
| API权限 | 接口访问权限 | GET /api/users、POST /api/users |
4.3 权限校验流程
用户请求 ──> Gateway ──> Token验证 ──> 权限拦截器
│
▼
查询用户角色权限
│
▼
校验是否有权限
│
┌─────────────────┴─────────────────┐
▼ ▼
有权限 ──> 执行业务逻辑 无权限 ──> 返回4035. 安全防护
5.1 常见攻击防护
| 攻击类型 | 防护措施 | 实现方案 |
|---|---|---|
| XSS | 输入过滤 + 输出转义 | 前端Vue自动转义,后端XSS过滤器 |
| CSRF | Token验证 + SameSite Cookie | JWT天然防御,Cookie设置SameSite |
| SQL注入 | 参数化查询 | MyBatis #{}预编译 |
| 暴力破解 | 登录限流 + 验证码 | Redis计数,5次失败锁定15分钟 |
| 越权访问 | 权限校验 | 方法级别权限注解 @PreAuthorize |
5.2 接口安全
java
// 接口权限控制示例
@RestController
@RequestMapping("/api/v1/users")
@PreAuthorize("hasRole('ADMIN')") // 类级别权限
public class UserController {
@GetMapping
@PreAuthorize("hasAuthority('user:read')") // 方法级别权限
public Result listUsers() {
// ...
}
@PostMapping
@PreAuthorize("hasAuthority('user:create')")
public Result createUser(@RequestBody UserDTO user) {
// ...
}
}5.3 限流策略
| 限流类型 | 阈值 | 说明 |
|---|---|---|
| 全局限流 | 1000 QPS | 系统整体保护 |
| 用户限流 | 100 QPS/用户 | 防止单用户刷接口 |
| 登录限流 | 5次/15分钟 | 防止暴力破解 |
| 验证码限流 | 3次/小时 | 防止短信轰炸 |
6. 数据安全
6.1 敏感数据加密
| 数据类型 | 加密方式 | 说明 |
|---|---|---|
| 密码 | BCrypt | 单向哈希,cost=12 |
| 手机号 | AES | 数据库加密存储,展示脱敏 |
| 身份证号 | AES | 数据库加密存储,展示脱敏 |
| 邮箱 | AES | 数据库加密存储 |
6.2 密钥管理
密钥分级:
├─ 一级密钥:主密钥(HSM/硬件加密机存储)
├─ 二级密钥:数据加密密钥(由主密钥加密存储)
└─ 三级密钥:应用密钥(由数据加密密钥加密存储)
密钥轮换:
- 数据加密密钥:每季度轮换
- 应用密钥:每月轮换
- JWT签名密钥:每半年轮换7. 安全审计
7.1 审计日志内容
json
{
"timestamp": "2026-03-10T10:30:00Z",
"userId": "10001",
"username": "admin",
"operation": "CREATE_USER",
"resource": "USER",
"resourceId": "10002",
"result": "SUCCESS",
"ip": "192.168.1.100",
"userAgent": "Mozilla/5.0...",
"requestParams": "{\"username\":\"test\"}",
"responseCode": 200,
"duration": 150
}7.2 审计范围
| 操作类型 | 是否审计 | 说明 |
|---|---|---|
| 用户登录/登出 | 是 | 包括成功和失败 |
| 用户增删改 | 是 | 所有写操作 |
| 权限变更 | 是 | 角色、权限调整 |
| 系统配置变更 | 是 | 参数修改 |
| 数据导出 | 是 | 敏感数据导出 |
| 查询操作 | 否 | 只读操作不审计 |
8. 安全运维
8.1 安全监控
| 监控项 | 告警阈值 | 响应时间 |
|---|---|---|
| 登录失败次数 | >10次/分钟 | 立即 |
| 异常IP访问 | 陌生IP高频访问 | 5分钟 |
| 权限越权尝试 | 403错误>100次 | 立即 |
| 数据导出量 | >1000条/次 | 立即 |
8.2 应急响应
| 安全事件 | 响应措施 |
|---|---|
| 账户被盗 | 冻结账户,强制下线,通知用户 |
| 暴力破解 | 封禁IP,通知管理员 |
| 数据泄露 | 启动应急预案,通知相关方 |
| 系统入侵 | 隔离受影响系统,启动调查 |
9. 下一步行动
- [ ] 配置Spring Security安全框架
- [ ] 实现JWT认证过滤器
- [ ] 配置HTTPS证书
- [ ] 实现权限拦截器
- [ ] 配置审计日志
- [ ] 制定安全运维手册
文档版本历史
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| 1.0 | 2026-03-10 | 初始版本 | 系统架构师 |
