设备认证机制
引用文件
本文引用的文件
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- IDeviceCertification.java
- DeviceCertification.java
- DeviceCertificationMapper.java
- DeviceConfig.java
- AppDeviceCertificationReqVO.java
- AppDeviceCertificationController.java
- DeviceApi.java
- DeviceCacheUtils.java
- RegularMatchesUtil.java
- MacUtil.java
- access_by_lua_block.lua
- ErrorCodeConstants.java
目录
简介
本文件系统性阐述设备认证机制的技术实现,重点覆盖以下方面:
- 双重认证策略:MAC地址与CPU序列号的协同校验
- 认证流程:新设备注册、老设备重新激活、认证码生成与下发
- 参数验证:MAC格式校验、设备信息完整性检查、版本兼容性判断
- IP地址解析:基于请求IP定位区域并落库
- 结果处理:成功/失败/异常的统一响应与错误码
- API接口文档与使用示例:请求参数、响应格式、错误码说明
- 安全最佳实践与常见问题解决方案
项目结构
围绕设备认证的关键模块与文件如下:
- 控制层:AppDeviceCertificationController 提供对外认证接口
- 业务层:DeviceCertificationImpl(新版本)、DeviceCertificationOldImpl(旧版本)、DeviceService(设备主服务)
- 数据访问层:DeviceCertificationMapper、DeviceCertification 数据对象
- 配置与工具:DeviceConfig(开关控制)、RegularMatchesUtil/MacUtil(MAC校验)、DeviceCacheUtils(缓存与降级)
- RPC接口:DeviceApi(跨模块查询设备)
图表来源
- AppDeviceCertificationController.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- DeviceService.java
- DeviceConfig.java
- DeviceCertificationMapper.java
- DeviceCertification.java
- AppDeviceCertificationReqVO.java
- DeviceApi.java
- DeviceCacheUtils.java
章节来源
- AppDeviceCertificationController.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- DeviceService.java
- DeviceConfig.java
- DeviceCertificationMapper.java
- DeviceCertification.java
- AppDeviceCertificationReqVO.java
- DeviceApi.java
- DeviceCacheUtils.java
核心组件
- IDeviceCertification:认证服务接口,定义统一的认证入口
- DeviceCertificationImpl:新版本认证实现,支持MAC+CPU双因子与设备信息完整性校验
- DeviceCertificationOldImpl:旧版本认证实现,兼容历史调用
- DeviceCertificationMapper/DeviceCertification:认证记录持久化与实体
- DeviceConfig:认证记录开关与域名/IP判定
- AppDeviceCertificationReqVO:认证请求参数载体
- DeviceApi/DeviceCacheUtils:跨模块查询设备与缓存降级
- RegularMatchesUtil/MacUtil:MAC格式校验工具
- AppDeviceCertificationController:认证对外HTTP接口
章节来源
- IDeviceCertification.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- DeviceCertificationMapper.java
- DeviceCertification.java
- DeviceConfig.java
- AppDeviceCertificationReqVO.java
- DeviceApi.java
- DeviceCacheUtils.java
- RegularMatchesUtil.java
- MacUtil.java
- AppDeviceCertificationController.java
架构总览
认证整体流程分为“请求接入—参数校验—设备查询—激活/重新激活—认证记录落库—响应返回”。
图表来源
- AppDeviceCertificationController.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- DeviceCertificationMapper.java
详细组件分析
认证接口与请求参数
- 接口路径
- 新版本:POST /task/certification(请求体携带参数)
- 旧版本:GET /task/
{deviceMac}(路径参数deviceMac)
- 请求参数(AppDeviceCertificationReqVO)
- mac:设备MAC地址(必填)
- cpu:CPU序列号(可选,为空时按MAC查询)
- deviceModel、brand、systemVersion、build、ddr、sdkVersionName、ui、platform 等:设备信息
- 其他:activationTime、regionId、ipAddress、deviceIp 等由服务端填充
- 响应格式
- 成功:包含 certification_code(认证码)
- 失败:统一错误码与消息
章节来源
双重认证策略:MAC+CPU
- 查询优先级
- 若传入cpu:优先按 mac+cpu 查询
- 若未传入cpu:回退按 mac 查询
- 缓存与降级
- DeviceCacheUtils 统一封装:先查缓存,再走RPC,最后回退到本地查询
- MAC格式校验
- RegularMatchesUtil/MacUtil 提供MAC格式校验,确保输入合法
图表来源
章节来源
设备激活与重新激活逻辑
- 新设备注册
- 校验MAC格式
- 解析IP归属地(regionId/ipAddress)
- 选择默认渠道(按platform)
- 创建设备并激活(status=1),生成随机认证码
- 老设备重新激活
- 若设备未激活或认证码缺失、版本不一致、设备信息不完整、IP或UI异常,触发重新激活
- 更新设备信息并生成新认证码
- 重复请求保护
- 避免重复激活统计异常,区分首次激活与后续更新
章节来源
认证记录与异步落库
- 认证记录实体:DeviceCertification(包含mac/cpu/systemVersion/build/ddr/deviceIp/ipAddress/type/requestHost/sdkVersionName/createTime等)
- 异步队列:使用环形队列缓存最近1000条认证记录
- 定时任务:每10秒批量写入数据库
- 开关控制:DeviceConfig 决定是否记录(域名/IP维度)
图表来源
- DeviceCertification.java
- DeviceCertificationMapper.java
- DeviceCertificationImpl.java
- DeviceConfig.java
章节来源
- DeviceCertification.java
- DeviceCertificationImpl.java
- DeviceCertificationMapper.java
- DeviceConfig.java
IP地址解析与区域绑定
- 通过请求IP解析区域ID与归属地
- 用于设备首次注册与重新激活时更新 deviceIp、regionId、ipAddress 字段
章节来源
版本兼容性与渠道选择
- 旧版本接口:GET /task/
{deviceMac},内部委托新版本实现并打上type=0标记 - 新版本接口:POST /task/certification,type=1
- 渠道选择:按platform自动选择默认渠道;旧版本特殊渠道名兼容
章节来源
错误处理与异常捕获
- 参数校验异常:MAC格式非法抛出参数异常
- 业务异常:设备不存在、版本不兼容、信息不完整等
- 统一响应:success/error封装,便于前端处理
- 错误码:ErrorCodeConstants集中定义(设备相关错误码段)
章节来源
依赖关系分析
- 控制器依赖认证服务(多实现:新旧版本)
- 认证服务依赖设备服务、区域服务、渠道服务、配置、认证记录映射
- 设备查询支持缓存降级(DeviceCacheUtils → DeviceApi)
- MAC校验工具独立于业务,提供正则与格式化能力
图表来源
- AppDeviceCertificationController.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- DeviceCacheUtils.java
- DeviceApi.java
- RegularMatchesUtil.java
- MacUtil.java
性能考量
- 异步认证记录:环形队列缓存+定时批量入库,降低写放大
- 缓存降级:优先查缓存/RPC,减少数据库压力
- 批量更新:设备信息更新采用批量写入策略
- IP解析:仅在必要时解析,避免重复计算
[本节为通用建议,不直接分析具体文件]
故障排查指南
- MAC格式错误
- 现象:抛出参数异常
- 排查:确认输入格式为XX:XX:XX:XX:XX:XX
- 设备未激活/认证码缺失
- 现象:触发重新激活并生成新认证码
- 排查:检查设备状态、版本号、设备信息完整性
- IP解析异常
- 现象:归属地为空或错误
- 排查:确认请求IP有效且可解析
- 认证记录未入库
- 现象:定时任务后才写入
- 排查:检查开关配置与定时任务是否正常
章节来源
结论
该认证机制通过MAC+CPU双重校验、严格的参数与版本兼容性检查、完善的IP解析与区域绑定、以及异步认证记录落库,实现了高可靠、可扩展的设备入网认证能力。配合缓存降级与批量写入策略,在保证安全性的同时兼顾了性能与稳定性。
[本节为总结性内容,不直接分析具体文件]
附录
API接口文档
- 新版本认证接口
- 方法与路径:POST /task/certification
- 请求体:AppDeviceCertificationReqVO
- 响应:包含 certification_code
- 旧版本认证接口
- 方法与路径:GET /task/
{deviceMac} - 路径参数:deviceMac
- 响应:包含 certification_code
- 方法与路径:GET /task/
章节来源
请求参数与响应格式
- 请求参数(AppDeviceCertificationReqVO)
- mac:MAC地址(必填)
- cpu:CPU序列号(可选)
- deviceModel、brand、systemVersion、build、ddr、sdkVersionName、ui、platform 等:设备信息
- 响应
- 成功:
{ "code": 0, "message": "...", "data": { "certification_code": "..." } } - 失败:
{ "code": 非0, "message": "...", "data": null }
- 成功:
章节来源
错误码说明
- 设备相关错误码段:1_600__001_000 起始
- 示例:设备不存在、导入失败、条件不能为空等
章节来源
安全最佳实践
- 输入校验:严格MAC格式校验与长度限制
- 双因子认证:优先使用MAC+CPU组合
- 版本兼容:SDK版本名不一致时强制重新激活
- 认证记录:开启开关并定期清理,避免数据膨胀
- 缓存降级:合理设置缓存命中率,避免热点击穿
[本节为通用建议,不直接分析具体文件]
常见问题与解决方案
- MAC格式不正确
- 方案:使用工具类进行格式校验与标准化
- 设备重复注册
- 方案:按MAC+CPU唯一约束,避免重复数据
- IP归属地解析失败
- 方案:降级策略与日志记录,确保不影响主流程
- 认证记录丢失
- 方案:检查定时任务与开关配置,确认批量写入成功
章节来源