首页 / 安全体系 / 认证与授权
认证与授权
JWT 过滤器、RBAC、租户与数据权限、Go 代理认证、WebSocket 握手鉴权与设备认证。
认证授权体系
| 主体 | 认证 | 授权 |
|---|---|---|
| APP 会员 | 验证码/社交/小程序登录 + TOTP | 登录用户上下文 + 设备/家庭归属校验 |
| 后台管理员 | 账号密码 + OAuth + MFA | RBAC 角色菜单权限(@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-Id、User-ID、Tenant-ID、Region,Go 拦截器据此鉴权与隔离。
WebSocket 握手鉴权
- 握手先到 Java(IoT 模块),
RealtimeHandshakeAuthInterceptor校验登录态与设备资源权限 - 设备名/产品/设备 ID/租户由服务端写入会话属性,不信任客户端 Header
RealtimeWebSocketProxyHandler携带内部签名(secret ≥32 字符、TTL ≤30 秒)桥接到固定 Go 实例- Go wssvr 校验签名;鉴权或依赖不可用 fail-closed
设备认证
- 登录认证
loginAuthLogic:设备密钥/证书验证。 - 访问认证
accessAuthLogic:会话级访问凭证。 - 上线后推送
device.up.status.connected;Topic 权限隔离由 EMQX 管控。
MFA 与防爆破
- 后台管理员与高风险操作(远程格式化、改固件参数)强制 TOTP MFA。
- 登录接口速率限制 + 连续失败锁定;验证码图形/行为检测。
- Token 含有效期;刷新令牌与设备 ID 绑定。