HarmonyOS 设备状态检测:你的APP检测到你设备的“身份证“了吗
什么是设备状态检测你有没有想过怎么知道一台设备是不是被 root 过怎么知道设备有没有被篡改这就是设备状态检测要解决的问题。设备状态检测DeviceVerify是 Device Security Kit 的一部分它给每台设备发一个身份证——DeviceToken。这个 Token 包含了设备的安全状态信息可以用来判断设备是否安全。简单说DeviceToken 就是设备的身份证它告诉服务器这台设备是安全的没有被篡改过。核心功能设备状态检测的核心功能就是获取 DeviceToken获取 DeviceToken向 DeviceVerify 服务器请求设备的身份证验证设备状态服务器可以用 DeviceToken 来判断设备是否安全环境搭建硬件要求设备类型Phone、PC/2in1、Tablet、TV、WearableHarmonyOS 系统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}fromkit.DeviceSecurityKit;import{BusinessError}fromkit.BasicServicesKit;导入两个模块deviceCertificate设备证书接口用来获取 DeviceTokenBusinessError错误处理第二步获取 DeviceToken获取 DeviceToken 非常简单只需要一行代码try{deviceCertificate.getDeviceToken().then((token){console.info(Succeeded in executing getDeviceToken);this.displayTexttoken;}).catch((err:BusinessError){console.error(getDeviceToken failed! %{public}d %{public}s,err.code,err.message);});}catch(err){leterror:BusinessErrorerrasBusinessError;console.error(getDeviceToken failed! %{public}d %{public}s,error.code,error.message);}调用deviceCertificate.getDeviceToken()就能获取 DeviceToken。这个 Token 是一个字符串包含了设备的安全状态信息。第三步处理 DeviceToken获取到 DeviceToken 后你可以把它发送给你的服务器。asyncfunctionsendTokenToServer(token:string){try{letresponseawaitfetch(https://your-server.com/api/verify-device,{method:POST,headers:{Content-Type:application/json,},body:JSON.stringify({deviceToken:token})});letresultawaitresponse.json();if(result.isSecure){// 设备安全继续业务逻辑}else{// 设备不安全提示用户}}catch(error){// 处理错误}}把 DeviceToken 发送给你的服务器服务器可以用华为的云测 REST API 来验证设备状态。DeviceToken 有什么用DeviceToken 包含了设备的安全状态信息可以用来检测设备是否被 root// 服务器验证 DeviceTokenasyncfunctioncheckDeviceSecurity(token:string){// 调用华为云测 REST API 验证letresultawaitverifyDeviceToken(token);if(result.isRooted){// 设备被 root 过可能存在安全风险returnfalse;}returntrue;}检测设备是否被篡改// 检查设备系统是否被篡改asyncfunctioncheckDeviceIntegrity(token:string){letresultawaitverifyDeviceToken(token);if(result.isTampered){// 设备系统被篡改过returnfalse;}returntrue;}设备标记管理获取到 DeviceToken 后你还可以通过云测 REST API 进行设备标记管理查询设备标记状态查看设备是否被标记更新设备标记状态更新设备的标记删除设备标记状态删除设备的标记实际应用场景设备状态检测在实际开发中有很多用途金融应用安全检测// 用户登录前检查设备是否安全asyncfunctionloginWithDeviceCheck(username:string,password:string){lettokenawaitdeviceCertificate.getDeviceToken();letisSecureawaitcheckDeviceSecurity(token);if(!isSecure){// 设备不安全提示用户showWarning(您的设备存在安全风险请更换设备登录);return;}// 设备安全继续登录awaitlogin(username,password);}游戏防作弊// 游戏启动前检查设备是否被修改asyncfunctionstartGameWithDeviceCheck(){lettokenawaitdeviceCertificate.getDeviceToken();letisTamperedawaitcheckDeviceIntegrity(token);if(isTampered){// 设备被修改过可能存在作弊风险showError(检测到设备异常无法启动游戏);return;}// 设备正常启动游戏awaitstartGame();}企业应用合规检查// 企业应用启动前检查设备是否符合企业安全策略asyncfunctioncheckEnterpriseCompliance(){lettokenawaitdeviceCertificate.getDeviceToken();letresultawaitverifyDeviceToken(token);if(result.isRooted||result.isTampered){// 设备不符合企业安全策略showError(您的设备不符合企业安全策略请联系 IT 部门);return;}// 设备符合要求继续使用awaitstartApp();}适用场景设备状态检测适合以下场景金融应用检测设备安全防止欺诈游戏应用检测设备是否被修改防止作弊企业应用检测设备是否符合企业安全策略支付应用检测设备安全保护交易安全政务应用检测设备安全确保数据安全注意事项网络要求获取 DeviceToken 需要联网设备支持大部分 HarmonyOS 设备都支持Token 有效期DeviceToken 有有效期需要定期获取服务器验证DeviceToken 需要在服务器端验证隐私合规使用设备检测功能要遵守隐私法规核心流程图设备状态检测的完整流程否是是否应用启动调用 getDeviceToken 获取设备令牌获取是否成功?检查网络连接将 DeviceToken 发送到服务器服务器调用华为云测 REST API 验证设备是否安全?允许业务操作提示设备存在安全风险DeviceToken 的应用场景获取 DeviceToken金融应用游戏应用企业应用登录前检测设备安全保护交易安全检测设备是否被修改防止作弊检查设备是否符合安全策略合规检查服务器验证 DeviceToken返回验证结果并决策总结设备状态检测给你的设备发一张身份证核心流程调用deviceCertificate.getDeviceToken()获取 DeviceToken把 DeviceToken 发送给你的服务器服务器用华为云测 REST API 验证设备状态根据验证结果决定是否允许业务操作掌握了这些你就能让你的应用检测设备安全状态提升应用的安全性。