3.0 KiB
3.0 KiB
Part 10: 安全设计
文档定位:全景式阐述系统的安全防御体系,涵盖身份认证、权限控制、数据保护及网络防护四大维度。
10.1 身份认证架构 (Authentication)
采用标准 OAuth2 Resource Server 架构,实现端到端的无状态身份验证。
10.1.1 认证流程
- 登录 (Login):
- 客户端调用
/admin-api/system/auth/login。 - 服务端校验账号密码,生成 JWT (JSON Web Token),包含
uid,tenant_id,scopes。
- 客户端调用
- 验签 (Verify):
- 网关层校验
Authorization: Bearer {token}。 - 解析 JWT 签名,若无效直接返回 401。
- 校验 Token 是否在 Redis 白名单中(支持服务端主动踢下线)。
- 网关层校验
- 透传 (Pass-through):
- 网关将
login-user-id等用户信息放入 HTTP Header,透传给下游微服务。
- 网关将
10.1.2 多端认证体系
- 管理端 (Admin):用户名/密码,支持图形验证码。
- 移动端 (App):手机号/验证码,微信一键登录。
- 设备端 (IoT):
- 一机一密:DeviceSecret 签名。
- 一型一密:ProductSecret 动态注册。
10.2 权限控制体系 (Authorization)
10.2.1 功能权限 (RBAC)
基于 Spring Security 的动态权限控制:
- 模型:用户 -> 角色 -> 菜单/按钮 (Permission Identifier)。
- 鉴权:
@PreAuthorize("@ss.hasPermission('system:user:create')") public CommonResult create() { ... } - 动态加载:服务启动时扫描 Controller 注解,上报权限标识至数据库。
10.2.2 数据权限
解决“同角色的不同用户只能看自己数据”的问题。
- 原理:MyBatis Plus 拦截器 (
DataPermissionInterceptor)。 - 策略:
- 全部数据
- 本部门及以下
- 本部门
- 仅本人
- 自定义部门
10.3 数据安全 (Data Security)
10.3.1 敏感数据脱敏
对手机号、身份证、银行卡等敏感字段传输进行掩码处理。
- 注解实现:
@Desensitization(type = MOBILE),Jackson 序列化时自动处理为138****0000。
10.3.2 密码存储
- 哈希算法:BCrypt (Spring Security 默认)。
- 加盐:每个用户随机 Salt,防止彩虹表攻击。
10.3.3 日志审计
- 操作日志:记录
UserID,IP,Module,Operation,Duration。 - 异常监控:拦截 SQL 注入攻击日志,记录异常堆栈。
10.4 网络防护
10.4.1 防重放攻击 (Replay Attack)
针对关键接口(如支付、设备控制):
- Header 携带
Timestamp和Nonce。 - 服务端校验 Timestamp 偏差 < 5分钟。
- Redis 缓存 Nonce,5分钟内禁止重复使用。
10.4.2 接口签名 (API Signature)
对于开放给第三方的 API:
- 算法:
Sign = MD5(Sort(Params) + AppSecret)。 - 作用:防止参数在传输过程中被篡改。