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

3.0 KiB
Raw Blame History

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)。
  • 鉴权
    @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 携带 TimestampNonce
  • 服务端校验 Timestamp 偏差 < 5分钟。
  • Redis 缓存 Nonce5分钟内禁止重复使用。

10.4.2 接口签名 (API Signature)

对于开放给第三方的 API

  • 算法:Sign = MD5(Sort(Params) + AppSecret)
  • 作用:防止参数在传输过程中被篡改。