什么是设备状态检测
你有没有想过,怎么知道一台设备是不是被 root 过?怎么知道设备有没有被篡改?这就是设备状态检测要解决的问题。
设备状态检测(DeviceVerify)是 Device Security Kit 的一部分,它给每台设备发一个"身份证"——DeviceToken。这个 Token 包含了设备的安全状态信息,可以用来判断设备是否安全。
简单说,DeviceToken 就是设备的"身份证",它告诉服务器:这台设备是安全的,没有被篡改过。
核心功能
设备状态检测的核心功能就是获取 DeviceToken:
- 获取 DeviceToken:向 DeviceVerify 服务器请求设备的"身份证"
- 验证设备状态:服务器可以用 DeviceToken 来判断设备是否安全
环境搭建
硬件要求
- 设备类型:Phone、PC/2in1、Tablet、TV、Wearable
- HarmonyOS 系统:HarmonyOS NEXT Developer Beta1 及以上
软件要求
- DevEco Studio 版本:DevEco Studio NEXT Developer Beta1 及以上
- HarmonyOS SDK 版本:HarmonyOS NEXT Developer Beta1 SDK 及以上
搭建步骤
- 安装 DevEco Studio:去华为开发者官网下载安装
- 配置开发环境:确保网络环境正常
- 设备调试:使用真机进行调试
项目结构
├── entry/src/main/ets │ ├── entryability │ │ └── EntryAbility.ets // 程序入口类 │ ├── model │ │ └── DevCertManagerModel.ts // DeviceToken 获取类 │ └── pages │ └── Index.ets // 主页面项目结构很简单,核心逻辑在DevCertManagerModel.ts里。
第一步:导入模块
import{deviceCertificate}from'@kit.DeviceSecurityKit';import{BusinessError}from'@kit.BasicServicesKit';导入两个模块:
deviceCertificate:设备证书接口,用来获取 DeviceTokenBusinessError:错误处理
第二步:获取 DeviceToken
获取 DeviceToken 非常简单,只需要一行代码:
try{deviceCertificate.getDeviceToken().then((token)=>{console.info('Succeeded in executing getDeviceToken');this.displayText=token;}).catch((err:BusinessError)=>{console.error('getDeviceToken failed! %{public}d %{public}s',err.code,err.message);});}catch(err){leterror:BusinessError=errasBusinessError;console.error('getDeviceToken failed! %{public}d %{public}s',error.code,error.message);}调用deviceCertificate.getDeviceToken()就能获取 DeviceToken。这个 Token 是一个字符串,包含了设备的安全状态信息。
第三步:处理 DeviceToken
获取到 DeviceToken 后,你可以把它发送给你的服务器。
asyncfunctionsendTokenToServer(token:string){try{letresponse=awaitfetch('https://your-server.com/api/verify-device',{method:'POST',headers:{'Content-Type':'application/json',},body:JSON.stringify({deviceToken:token})});letresult=awaitresponse.json();if(result.isSecure){// 设备安全,继续业务逻辑}else{// 设备不安全,提示用户}}catch(error){// 处理错误}}把 DeviceToken 发送给你的服务器,服务器可以用华为的云测 REST API 来验证设备状态。
DeviceToken 有什么用
DeviceToken 包含了设备的安全状态信息,可以用来:
检测设备是否被 root
// 服务器验证 DeviceTokenasyncfunctioncheckDeviceSecurity(token:string){// 调用华为云测 REST API 验证letresult=awaitverifyDeviceToken(token);if(result.isRooted){// 设备被 root 过,可能存在安全风险returnfalse;}returntrue;}检测设备是否被篡改
// 检查设备系统是否被篡改asyncfunctioncheckDeviceIntegrity(token:string){letresult=awaitverifyDeviceToken(token);if(result.isTampered){// 设备系统被篡改过returnfalse;}returntrue;}设备标记管理
获取到 DeviceToken 后,你还可以通过云测 REST API 进行设备标记管理:
- 查询设备标记状态:查看设备是否被标记
- 更新设备标记状态:更新设备的标记
- 删除设备标记状态:删除设备的标记
实际应用场景
设备状态检测在实际开发中有很多用途:
金融应用安全检测
// 用户登录前,检查设备是否安全asyncfunctionloginWithDeviceCheck(username:string,password:string){lettoken=awaitdeviceCertificate.getDeviceToken();letisSecure=awaitcheckDeviceSecurity(token);if(!isSecure){// 设备不安全,提示用户showWarning('您的设备存在安全风险,请更换设备登录');return;}// 设备安全,继续登录awaitlogin(username,password);}游戏防作弊
// 游戏启动前,检查设备是否被修改asyncfunctionstartGameWithDeviceCheck(){lettoken=awaitdeviceCertificate.getDeviceToken();letisTampered=awaitcheckDeviceIntegrity(token);if(isTampered){// 设备被修改过,可能存在作弊风险showError('检测到设备异常,无法启动游戏');return;}// 设备正常,启动游戏awaitstartGame();}企业应用合规检查
// 企业应用启动前,检查设备是否符合企业安全策略asyncfunctioncheckEnterpriseCompliance(){lettoken=awaitdeviceCertificate.getDeviceToken();letresult=awaitverifyDeviceToken(token);if(result.isRooted||result.isTampered){// 设备不符合企业安全策略showError('您的设备不符合企业安全策略,请联系 IT 部门');return;}// 设备符合要求,继续使用awaitstartApp();}适用场景
设备状态检测适合以下场景:
- 金融应用:检测设备安全,防止欺诈
- 游戏应用:检测设备是否被修改,防止作弊
- 企业应用:检测设备是否符合企业安全策略
- 支付应用:检测设备安全,保护交易安全
- 政务应用:检测设备安全,确保数据安全
注意事项
- 网络要求:获取 DeviceToken 需要联网
- 设备支持:大部分 HarmonyOS 设备都支持
- Token 有效期:DeviceToken 有有效期,需要定期获取
- 服务器验证:DeviceToken 需要在服务器端验证
- 隐私合规:使用设备检测功能要遵守隐私法规
核心流程图
设备状态检测的完整流程:
DeviceToken 的应用场景:
总结
设备状态检测给你的设备发一张"身份证",核心流程:
- 调用
deviceCertificate.getDeviceToken()获取 DeviceToken - 把 DeviceToken 发送给你的服务器
- 服务器用华为云测 REST API 验证设备状态
- 根据验证结果决定是否允许业务操作
掌握了这些,你就能让你的应用检测设备安全状态,提升应用的安全性。