# Part 10: 安全设计 > **文档定位**:全景式阐述系统的安全防御体系,涵盖身份认证、权限控制、数据保护及网络防护四大维度。 ## 10.1 身份认证架构 (Authentication) 采用标准 **OAuth2 Resource Server** 架构,实现端到端的无状态身份验证。 ### 10.1.1 认证流程 1. **登录 (Login)**: * 客户端调用 `/admin-api/system/auth/login`。 * 服务端校验账号密码,生成 JWT (JSON Web Token),包含 `uid`, `tenant_id`, `scopes`。 2. **验签 (Verify)**: * 网关层校验 `Authorization: Bearer {token}`。 * 解析 JWT 签名,若无效直接返回 401。 * 校验 Token 是否在 Redis 白名单中(支持服务端主动踢下线)。 3. **透传 (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)。 * **鉴权**: ```java @PreAuthorize("@ss.hasPermission('system:user:create')") public CommonResult create() { ... } ``` * **动态加载**:服务启动时扫描 Controller 注解,上报权限标识至数据库。 ### 10.2.2 数据权限 解决“同角色的不同用户只能看自己数据”的问题。 * **原理**:MyBatis Plus 拦截器 (`DataPermissionInterceptor`)。 * **策略**: 1. 全部数据 2. 本部门及以下 3. 本部门 4. 仅本人 5. 自定义部门 --- ## 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)`。 * 作用:防止参数在传输过程中被篡改。