首页 / 安全体系 / 认证与授权

认证授权体系

主体认证授权
APP 会员验证码/社交/小程序登录 + TOTP登录用户上下文 + 设备/家庭归属校验
后台管理员账号密码 + OAuth + MFARBAC 角色菜单权限(@PreAuthorize)
内部服务代理认证 + 内部签名RPC Metadata 租户/用户/Region 隔离
设备登录认证 + 访问认证MQTT Topic 权限 + 设备资源归属

Java 认证链路

请求 → TokenAuthenticationFilter(解析 JWT)
  → LoginUser 上下文(SecurityFrameworkUtils / ThreadLocal)
  → EntraxWebSecurityConfigurerAdapter(过滤链)
  → Controller @PreAuthorize(权限标识)
  → 未认证/越权 → AuthenticationEntryPoint / AccessDeniedHandler
  • LoginUserRequestInterceptor:RPC 调用注入登录用户上下文。
  • SecurityFrameworkService:权限判断与操作审计接口。
  • 接口分层:/admin-api(system_users)与 /app-api(member_user)分别鉴权。

RBAC 与租户数据权限

  • RBAC:角色 → 菜单/按钮权限;接口权限标识以 @PreAuthorize 为契约。
  • 租户:TenantUtils.execute(tenantId, ...) 隔离租户上下文;system_users 与 member_user 分域。
  • 数据权限:framework 提供行级数据权限过滤,按操作者归属控制可见范围。
  • 跨语言隔离:Go 侧按 Metadata 中 User-ID / Tenant-ID / Region 判定数据范围。

Go 代理认证

  • framework security/goauth:Go 代理认证异常与响应处理。
  • 内部服务调用使用 EntraxInternalSignatureService(HMAC 签名)校验来源。
  • 透传头:Trace-IdUser-IDTenant-IDRegion,Go 拦截器据此鉴权与隔离。

WebSocket 握手鉴权

  1. 握手先到 Java(IoT 模块),RealtimeHandshakeAuthInterceptor 校验登录态与设备资源权限
  2. 设备名/产品/设备 ID/租户由服务端写入会话属性,不信任客户端 Header
  3. RealtimeWebSocketProxyHandler 携带内部签名(secret ≥32 字符、TTL ≤30 秒)桥接到固定 Go 实例
  4. Go wssvr 校验签名;鉴权或依赖不可用 fail-closed

设备认证

  • 登录认证 loginAuthLogic:设备密钥/证书验证。
  • 访问认证 accessAuthLogic:会话级访问凭证。
  • 上线后推送 device.up.status.connected;Topic 权限隔离由 EMQX 管控。

MFA 与防爆破

  • 后台管理员与高风险操作(远程格式化、改固件参数)强制 TOTP MFA。
  • 登录接口速率限制 + 连续失败锁定;验证码图形/行为检测。
  • Token 含有效期;刷新令牌与设备 ID 绑定。