跳到主要内容

设备认证机制

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件系统性阐述设备认证机制的技术实现,重点覆盖以下方面:

  • 双重认证策略:MAC地址与CPU序列号的协同校验
  • 认证流程:新设备注册、老设备重新激活、认证码生成与下发
  • 参数验证:MAC格式校验、设备信息完整性检查、版本兼容性判断
  • IP地址解析:基于请求IP定位区域并落库
  • 结果处理:成功/失败/异常的统一响应与错误码
  • API接口文档与使用示例:请求参数、响应格式、错误码说明
  • 安全最佳实践与常见问题解决方案

项目结构

围绕设备认证的关键模块与文件如下:

  • 控制层:AppDeviceCertificationController 提供对外认证接口
  • 业务层:DeviceCertificationImpl(新版本)、DeviceCertificationOldImpl(旧版本)、DeviceService(设备主服务)
  • 数据访问层:DeviceCertificationMapper、DeviceCertification 数据对象
  • 配置与工具:DeviceConfig(开关控制)、RegularMatchesUtil/MacUtil(MAC校验)、DeviceCacheUtils(缓存与降级)
  • RPC接口:DeviceApi(跨模块查询设备)

Mermaid Diagram Code:

graph TB
subgraph "设备模块"
C["AppDeviceCertificationController<br/>REST控制器"]
S1["DeviceCertificationImpl<br/>新版本认证"]
S2["DeviceCertificationOldImpl<br/>旧版本认证"]
SVC["DeviceService<br/>设备主服务"]
CFG["DeviceConfig<br/>配置开关"]
MAP["DeviceCertificationMapper<br/>认证记录持久化"]
DTO["DeviceCertification<br/>认证记录DO"]
VO["AppDeviceCertificationReqVO<br/>请求参数VO"]
API["DeviceApi<br/>RPC查询设备"]
CACHE["DeviceCacheUtils<br/>缓存与降级"]
end
C --> S1
C --> S2
S1 --> SVC
S2 --> SVC
S1 --> CFG
S1 --> MAP
S1 --> DTO
S1 --> VO
S1 --> API
S1 --> CACHE

图表来源

章节来源

核心组件

  • IDeviceCertification:认证服务接口,定义统一的认证入口
  • DeviceCertificationImpl:新版本认证实现,支持MAC+CPU双因子与设备信息完整性校验
  • DeviceCertificationOldImpl:旧版本认证实现,兼容历史调用
  • DeviceCertificationMapper/DeviceCertification:认证记录持久化与实体
  • DeviceConfig:认证记录开关与域名/IP判定
  • AppDeviceCertificationReqVO:认证请求参数载体
  • DeviceApi/DeviceCacheUtils:跨模块查询设备与缓存降级
  • RegularMatchesUtil/MacUtil:MAC格式校验工具
  • AppDeviceCertificationController:认证对外HTTP接口

章节来源

架构总览

认证整体流程分为“请求接入—参数校验—设备查询—激活/重新激活—认证记录落库—响应返回”。

Mermaid Diagram Code:

sequenceDiagram
participant 客户端 as "客户端"
participant 控制器 as "AppDeviceCertificationController"
participant 认证服务 as "DeviceCertificationImpl"
participant 设备服务 as "DeviceService"
participant 区域服务 as "RegionService"
participant 渠道服务 as "ChannelService"
participant 认证记录 as "DeviceCertificationMapper"
客户端->>控制器 : "POST /task/certification 或 GET /task/{deviceMac}"
控制器->>认证服务 : "networkAccessCertification(reqVO, type)"
认证服务->>设备服务 : "按MAC/CPU查询设备"
alt "设备不存在"
认证服务->>区域服务 : "解析IP归属地"
认证服务->>渠道服务 : "按平台选择默认渠道"
认证服务->>设备服务 : "创建设备并激活"
认证服务->>认证记录 : "异步入队认证记录"
认证服务-->>控制器 : "返回认证码"
else "设备已存在"
认证服务->>设备服务 : "校验状态/版本/设备信息完整性"
认证服务->>设备服务 : "更新设备信息并重新激活"
认证服务->>认证记录 : "异步入队认证记录"
认证服务-->>控制器 : "返回认证码"
end
控制器-->>客户端 : "统一响应"

图表来源

详细组件分析

认证接口与请求参数

  • 接口路径
    • 新版本: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格式校验,确保输入合法

Mermaid Diagram Code:

flowchart TD
Start(["进入认证"]) --> CheckCpu["是否提供CPU?"]
CheckCpu --> |是| QueryByMacCpu["按MAC+CPU查询设备"]
CheckCpu --> |否| QueryByMac["按MAC查询设备"]
QueryByMacCpu --> Found{"是否找到设备?"}
QueryByMac --> Found
Found --> |否| ValidateMac["校验MAC格式"]
Found --> |是| CheckStatus["校验状态/版本/信息完整性"]
ValidateMac --> |通过| CreateDevice["创建并激活设备"]
ValidateMac --> |失败| ReturnErr["返回错误"]
CheckStatus --> |需重新激活| UpdateDevice["更新设备并生成新认证码"]
CheckStatus --> |无需| ReturnCert["返回现有认证码"]
CreateDevice --> Record["异步入队认证记录"]
UpdateDevice --> Record
Record --> Done(["完成"])
ReturnCert --> Done
ReturnErr --> Done

图表来源

章节来源

设备激活与重新激活逻辑

  • 新设备注册
    • 校验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维度)

Mermaid Diagram Code:

classDiagram
class DeviceCertification {
+Long id
+String mac
+String cpu
+String systemVersion
+String build
+String ddr
+String deviceIp
+String ipAddress
+int type
+String requestHost
+String sdkVersionName
+Date createTime
}
class DeviceCertificationMapper {
+batchInsertDevice(list)
}
class DeviceCertificationImpl {
+networkAccessCertification(reqVO,type)
+addDeviceCertification(reqVO,ipAddress,type)
+opDeviceCertification(obj,type)
+insertDeviceCertification()
}
class DeviceConfig {
+deviceCertificationFlag
+deviceCertificationOnIpFlag
+addDeviceCertification(host)
}
DeviceCertificationImpl --> DeviceCertification : "构建"
DeviceCertificationImpl --> DeviceCertificationMapper : "批量写入"
DeviceCertificationImpl --> DeviceConfig : "开关控制"

图表来源

章节来源

IP地址解析与区域绑定

  • 通过请求IP解析区域ID与归属地
  • 用于设备首次注册与重新激活时更新 deviceIp、regionId、ipAddress 字段

章节来源

版本兼容性与渠道选择

  • 旧版本接口:GET /task/{deviceMac},内部委托新版本实现并打上type=0标记
  • 新版本接口:POST /task/certification,type=1
  • 渠道选择:按platform自动选择默认渠道;旧版本特殊渠道名兼容

章节来源

错误处理与异常捕获

  • 参数校验异常:MAC格式非法抛出参数异常
  • 业务异常:设备不存在、版本不兼容、信息不完整等
  • 统一响应:success/error封装,便于前端处理
  • 错误码:ErrorCodeConstants集中定义(设备相关错误码段)

章节来源

依赖关系分析

  • 控制器依赖认证服务(多实现:新旧版本)
  • 认证服务依赖设备服务、区域服务、渠道服务、配置、认证记录映射
  • 设备查询支持缓存降级(DeviceCacheUtils → DeviceApi)
  • MAC校验工具独立于业务,提供正则与格式化能力

Mermaid Diagram Code:

graph LR
Controller["AppDeviceCertificationController"] --> NewImpl["DeviceCertificationImpl"]
Controller --> OldImpl["DeviceCertificationOldImpl"]
NewImpl --> DeviceService["DeviceService"]
NewImpl --> Config["DeviceConfig"]
NewImpl --> Mapper["DeviceCertificationMapper"]
NewImpl --> Cache["DeviceCacheUtils"]
NewImpl --> Mac["RegularMatchesUtil/MacUtil"]
Cache --> DeviceApi["DeviceApi"]

图表来源

性能考量

  • 异步认证记录:环形队列缓存+定时批量入库,降低写放大
  • 缓存降级:优先查缓存/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

章节来源

请求参数与响应格式

  • 请求参数(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归属地解析失败
    • 方案:降级策略与日志记录,确保不影响主流程
  • 认证记录丢失
    • 方案:检查定时任务与开关配置,确认批量写入成功

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答