Files
aiot-platform-cloud/docs/technical-overview/10-安全设计.md

81 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 缓存 Nonce5分钟内禁止重复使用。
### 10.4.2 接口签名 (API Signature)
对于开放给第三方的 API
* 算法:`Sign = MD5(Sort(Params) + AppSecret)`。
* 作用:防止参数在传输过程中被篡改。