什么是设备状态检测

你有没有想过,怎么知道一台设备是不是被 root 过?怎么知道设备有没有被篡改?这就是设备状态检测要解决的问题。

设备状态检测(DeviceVerify)是 Device Security Kit 的一部分,它给每台设备发一个"身份证"——DeviceToken。这个 Token 包含了设备的安全状态信息,可以用来判断设备是否安全。

简单说,DeviceToken 就是设备的"身份证",它告诉服务器:这台设备是安全的,没有被篡改过。

核心功能

设备状态检测的核心功能就是获取 DeviceToken:

  1. 获取 DeviceToken:向 DeviceVerify 服务器请求设备的"身份证"
  2. 验证设备状态:服务器可以用 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 及以上

搭建步骤

  1. 安装 DevEco Studio:去华为开发者官网下载安装
  2. 配置开发环境:确保网络环境正常
  3. 设备调试:使用真机进行调试

项目结构

├── 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:设备证书接口,用来获取 DeviceToken
  • BusinessError:错误处理

第二步:获取 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) {
  let error: BusinessError = err as BusinessError;
  console.error('getDeviceToken failed! %{public}d %{public}s', error.code, error.message);
}

调用 deviceCertificate.getDeviceToken() 就能获取 DeviceToken。这个 Token 是一个字符串,包含了设备的安全状态信息。

第三步:处理 DeviceToken

获取到 DeviceToken 后,你可以把它发送给你的服务器。

async function sendTokenToServer(token: string) {
  try {
    let response = await fetch('https://your-server.com/api/verify-device', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ deviceToken: token })
    });
    let result = await response.json();
    if (result.isSecure) {
      // 设备安全,继续业务逻辑
    } else {
      // 设备不安全,提示用户
    }
  } catch (error) {
    // 处理错误
  }
}

把 DeviceToken 发送给你的服务器,服务器可以用华为的云测 REST API 来验证设备状态。

DeviceToken 有什么用

DeviceToken 包含了设备的安全状态信息,可以用来:

检测设备是否被 root

// 服务器验证 DeviceToken
async function checkDeviceSecurity(token: string) {
  // 调用华为云测 REST API 验证
  let result = await verifyDeviceToken(token);
  if (result.isRooted) {
    // 设备被 root 过,可能存在安全风险
    return false;
  }
  return true;
}

检测设备是否被篡改

// 检查设备系统是否被篡改
async function checkDeviceIntegrity(token: string) {
  let result = await verifyDeviceToken(token);
  if (result.isTampered) {
    // 设备系统被篡改过
    return false;
  }
  return true;
}

设备标记管理

获取到 DeviceToken 后,你还可以通过云测 REST API 进行设备标记管理:

  • 查询设备标记状态:查看设备是否被标记
  • 更新设备标记状态:更新设备的标记
  • 删除设备标记状态:删除设备的标记

实际应用场景

设备状态检测在实际开发中有很多用途:

金融应用安全检测

// 用户登录前,检查设备是否安全
async function loginWithDeviceCheck(username: string, password: string) {
  let token = await deviceCertificate.getDeviceToken();
  let isSecure = await checkDeviceSecurity(token);
  
  if (!isSecure) {
    // 设备不安全,提示用户
    showWarning('您的设备存在安全风险,请更换设备登录');
    return;
  }
  
  // 设备安全,继续登录
  await login(username, password);
}

游戏防作弊

// 游戏启动前,检查设备是否被修改
async function startGameWithDeviceCheck() {
  let token = await deviceCertificate.getDeviceToken();
  let isTampered = await checkDeviceIntegrity(token);
  
  if (isTampered) {
    // 设备被修改过,可能存在作弊风险
    showError('检测到设备异常,无法启动游戏');
    return;
  }
  
  // 设备正常,启动游戏
  await startGame();
}

企业应用合规检查

// 企业应用启动前,检查设备是否符合企业安全策略
async function checkEnterpriseCompliance() {
  let token = await deviceCertificate.getDeviceToken();
  let result = await verifyDeviceToken(token);
  
  if (result.isRooted || result.isTampered) {
    // 设备不符合企业安全策略
    showError('您的设备不符合企业安全策略,请联系 IT 部门');
    return;
  }
  
  // 设备符合要求,继续使用
  await startApp();
}

适用场景

设备状态检测适合以下场景:

  • 金融应用:检测设备安全,防止欺诈
  • 游戏应用:检测设备是否被修改,防止作弊
  • 企业应用:检测设备是否符合企业安全策略
  • 支付应用:检测设备安全,保护交易安全
  • 政务应用:检测设备安全,确保数据安全

注意事项

  1. 网络要求:获取 DeviceToken 需要联网
  2. 设备支持:大部分 HarmonyOS 设备都支持
  3. Token 有效期:DeviceToken 有有效期,需要定期获取
  4. 服务器验证:DeviceToken 需要在服务器端验证
  5. 隐私合规:使用设备检测功能要遵守隐私法规

核心流程图

设备状态检测的完整流程:

应用启动

调用 getDeviceToken 获取设备令牌

获取是否成功?

检查网络连接

将 DeviceToken 发送到服务器

服务器调用华为云测 REST API 验证

设备是否安全?

允许业务操作

提示设备存在安全风险

DeviceToken 的应用场景:

获取 DeviceToken

金融应用

游戏应用

企业应用

登录前检测设备安全

保护交易安全

检测设备是否被修改

防止作弊

检查设备是否符合安全策略

合规检查

服务器验证 DeviceToken

返回验证结果并决策

总结

设备状态检测给你的设备发一张"身份证",核心流程:

  1. 调用 deviceCertificate.getDeviceToken() 获取 DeviceToken
  2. 把 DeviceToken 发送给你的服务器
  3. 服务器用华为云测 REST API 验证设备状态
  4. 根据验证结果决定是否允许业务操作

掌握了这些,你就能让你的应用检测设备安全状态,提升应用的安全性。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐