第19章 HarmonyOs开发图解之 安全管理

HarmonyOS 学习系统 | 阶段三:高级深耕期


学习目标

序号 能力
1 理解 HarmonyOS 三级权限体系(system_grant / user_grant / restricted)
2 掌握权限动态申请的标准五步流程
3 了解应用沙盒机制和生物特征识别认证

核心图解

HarmonyOS 安全权限等级金字塔

内容讲解

19.1 安全管理概述

HarmonyOS 的安全管理围绕"应用沙盒"和"权限体系"两大核心机制展开。每个应用运行在独立的沙盒中,默认无法访问其他应用的数据。如果需要访问系统资源(如相机、通讯录等),必须向系统申请对应权限。

生活化类比:应用沙盒就像"独立办公室"

每个应用都被关在自己的办公室(沙盒)里,默认不能去别人的办公室拿东西。但如果你的工作需要用到公共打印机(系统能力),就得向大楼管理员(系统)申请一张"通行证"(权限)。敏感通行证(如进入财务室 = 访问联系人)还需要大楼里每个人的同意(用户授权)。非敏感通行证(如使用走廊 = WIFI 信息)管理员直接就发了。

19.2 三级权限体系

HarmonyOS 将权限分为三个等级:

等级 授权方式 典型权限 说明
system_grant(非敏感) 系统自动授予 INTERNET、GET_WIFI_INFO、VIBRATE 安装时自动获得,无需用户确认
user_grant(敏感) 需用户手动授权 CAMERA、MICROPHONE、LOCATION、READ_MEDIA 运行时弹窗,用户同意后才授予
restricted(受限开放) 需权限证书 READ_CONTACTS、WRITE_CONTACTS 仅预装应用或通过认证的应用可申请

19.3 权限申请标准流程

权限申请分为五步:声明 -> 检查 -> 判断是否可申请 -> 申请 -> 处理结果。

// Step 1: 在 config.json 中声明权限
"reqPermissions": [
    { "name": "ohos.permission.CAMERA", "reason": "需要使用相机拍照", "usedScene": "拍照功能" }
]

// Step 2: 检查是否已授权
if (verifySelfPermission("ohos.permission.CAMERA") != IBundleManager.PERMISSION_GRANTED) {
    // Step 3: 检查是否可动态申请
    if (canRequestPermission("ohos.permission.CAMERA")) {
        // Step 4: 动态申请权限
        requestPermissionsFromUser(
            new String[]{"ohos.permission.CAMERA"}, REQUEST_CODE);
    } else {
        // 用户已拒绝且勾选了"不再询问",引导到设置页面
        showGoToSettingDialog();
    }
}

// Step 5: 处理授权结果
@Override
public void onRequestPermissionsFromUserResult(int requestCode,
        String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_CODE) {
        if (grantResults[0] == IBundleManager.PERMISSION_GRANTED) {
            // 授权成功,执行操作
            openCamera();
        } else {
            // 授权被拒绝,优雅降级
            showPlaceholderImage();
        }
    }
}

19.4 生物特征识别

HarmonyOS 支持 2D/3D 人脸识别,在摄像头和 TEE(可信执行环境)之间建立安全通道,确保人脸数据不会被 REE(富执行环境)中的应用获取。

// 生物特征识别认证
BioAuthnManager authnManager = new BioAuthnManager();
authnManager.auth(new AuthParam.Builder()
    .setChallenge("challenge_string".getBytes())
    .setAuthType(BioAuthnManager.AuthType.FACE_ONLY)
    .build(), new BioAuthnCallback() {
        @Override
        public void onAuthResult(int result, BioAuthnAuthResult authResult) {
            if (result == BioAuthnManager.SUCCESS) {
                // 认证成功
                HiLog.info(TAG, "人脸认证成功");
            }
        }
    });

代码速查卡

API 功能 示例
verifySelfPermission(name) 检查是否已授权 verifySelfPermission("ohos.permission.CAMERA")
canRequestPermission(name) 是否可动态申请 canRequestPermission("ohos.permission.CAMERA")
requestPermissionsFromUser(permissions, code) 动态申请权限 requestPermissionsFromUser(new String[]{...}, 100)
onRequestPermissionsFromUserResult() 处理授权结果 重写此回调方法
BioAuthnManager 生物特征识别管理 new BioAuthnManager()
authnManager.auth(param, callback) 发起生物识别认证 authnManager.auth(param, callback)

与 Android/iOS 对比

特性 HarmonyOS Android iOS
权限声明 config.json reqPermissions AndroidManifest.xml Info.plist
运行时授权 requestPermissionsFromUser requestPermissions() requestAuthorization()
权限等级 system_grant / user_grant / restricted normal / dangerous 使用时授权
生物识别 BioAuthnManager(TEE) BiometricPrompt LocalAuthentication
沙盒机制 应用级沙盒 应用级沙盒(Android 10+) 应用级沙盒

⚠️ 踩坑回忆录

用户拒绝了权限,我的 App 直接崩溃了

这是新手最常见的错误——没有处理权限被拒绝的情况。用户拒绝 CAMERA 权限后,代码仍然去调用相机 API,结果抛出 SecurityException 直接崩溃。正确做法是:权限被拒绝后,引导用户到系统设置页面手动开启(通过 Intent 跳转到应用设置),或者优雅地降级功能(比如没有相机权限就显示占位图而非直接崩溃)。

另一个坑:自定义权限名不能以 “ohos” 开头,且同一应用自定义权限不能超过 1024 个。这些限制在文档的角落里,不仔细看很容易踩到。


必做实操任务

序号 任务 难度
1 实现相机权限的动态申请,包含拒绝后的引导逻辑
2 查看 SystemPermission 类中定义的全部权限列表
3 实现多权限批量申请(相机 + 麦克风 + 存储)
4 实现生物特征识别认证登录
5 实现权限被拒绝后的优雅降级 UI

学习检查清单

  • 能说出三级权限体系的区别(system_grant / user_grant / restricted)
  • 能实现权限动态申请的五步标准流程
  • 能处理权限被拒绝的情况(引导设置 / 功能降级)
  • 理解应用沙盒的概念和作用
  • 能说出 TEE 和 REE 的区别
  • 了解生物特征识别的安全机制
  • 知道为什么自定义权限名不能以 “ohos” 开头
  • 能区分哪些权限需要用户授权,哪些系统自动授予

进阶方向

  • 深入研究 HarmonyOS 的 TEE 安全架构
  • 学习自定义权限的定义和使用
  • 探索企业级安全管理(MDM)和证书管理
    ] 了解生物特征识别的安全机制
  • 知道为什么自定义权限名不能以 “ohos” 开头
  • 能区分哪些权限需要用户授权,哪些系统自动授予

进阶方向

  • 深入研究 HarmonyOS 的 TEE 安全架构
  • 学习自定义权限的定义和使用
  • 探索企业级安全管理(MDM)和证书管理
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐