81 lines
3.0 KiB
Markdown
81 lines
3.0 KiB
Markdown
|
|
# 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)`。
|
|||
|
|
* 作用:防止参数在传输过程中被篡改。
|