HarmonyOS 安全存储与认证完全指南:AssetUtil + AuthUtil 最佳实践
文章目录一、前言二、AssetUtil 核心能力回顾主要方法三、AuthUtil 核心能力回顾主要方法四、组合使用方案生物认证保护敏感数据方案架构核心实现使用示例五、设备兼容性处理六、实际业务场景七、小结一、前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓移动应用中安全存储和身份认证是两个高度相关的需求你需要安全地存储用户 Token、密钥、密码等敏感数据AssetUtil你需要在访问这些敏感数据前先验证用户身份AuthUtilHarmonyOS 提供了AssetUtil关键资产存储类似 iOS Keychain和AuthUtil生物认证两套工具本文介绍如何将它们联动使用构建完整的安全存储与认证方案。二、AssetUtil 核心能力回顾主要方法// 添加关键资产同步staticaddSync(key:string,value:string):void// 获取关键资产同步staticgetSync(key:string):string|undefined// 删除关键资产同步staticremoveSync(key:string):void// 添加关键资产异步staticasyncadd(key:string,value:string):Promisevoid// 获取关键资产异步staticasyncget(key:string):Promisestring|undefined// 删除关键资产异步staticasyncremove(key:string):Promisevoid// 检查设备是否支持关键资产存储staticcanIUse():booleanAssetCrudDemoPage.ets 中的演示// 添加资产asyncaddAsset(){if(this.inputKeythis.inputValue){awaitAssetUtil.add(this.inputKey,this.inputValue);this.addLog(ADD,key${this.inputKey} value${this.inputValue},success);awaitthis.queryAllAssets();}}// 获取资产asyncqueryAsset(){if(this.inputKey){constvalueawaitAssetUtil.get(this.inputKey);if(value!undefined){this.addLog(GET,key${this.inputKey} → value${value},success);}else{this.addLog(GET,key${this.inputKey} 不存在,warn);}}}三、AuthUtil 核心能力回顾主要方法// 检查认证能力是否可用staticgetAvailableStatus(authType:userAuth.UserAuthType,authTrustLevel:userAuth.AuthTrustLevel):number// 启动认证staticonStart(authType:userAuth.UserAuthType[],authTrustLevel:userAuth.AuthTrustLevel,callback:IAuthCallback):userAuth.AuthInstance// 取消认证staticcancel(auth:userAuth.AuthInstance):void// 获取错误描述staticgetErrorMsg(result:userAuth.UserAuthResultCode):stringAuthFlowDemoPage.ets 中的演示startAuth(){if(!this.checkAvailable())return;this.authStatus认证中...;this.authColor#FF9800;this.authInstanceAuthUtil.onStart([this.selectedAuthType],this.selectedTrustLevel,{onResult:(result,extraInfo){if(resultuserAuth.UserAuthResultCode.SUCCESS){this.authStatus✅ 认证成功;this.authColor#00C853;this.addLog(AUTH,认证成功,success);this.authInstanceundefined;}else{consterrMsgAuthUtil.getErrorMsg(result);this.authStatus❌${errMsg};this.authColor#FF5252;this.addLog(AUTH,认证失败:${errMsg},error);this.authInstanceundefined;}}});}四、组合使用方案生物认证保护敏感数据方案架构用户请求访问敏感数据 ↓ 检查 AssetUtil.canIUse() ↓ AuthUtil.getAvailableStatus() 检查生物认证能力 ↓ AuthUtil.onStart() 触发生物认证 ↓ 认证成功 → AssetUtil.get(key) 获取数据 认证失败 → 拒绝访问记录日志核心实现/** * 通过生物认证后读取安全存储中的敏感数据 * param key 要读取的 Asset 键名 * param authTypes 允许的认证类型指纹/人脸/PIN */asyncgetSecuredData(key:string,authTypes:userAuth.UserAuthType[][userAuth.UserAuthType.FINGERPRINT,userAuth.UserAuthType.FACE]):Promisestring|undefined{// 1. 检查设备能力if(!AssetUtil.canIUse()){console.error(当前设备不支持关键资产存储);returnundefined;}// 2. 检查生物认证可用性constavailStatusAuthUtil.getAvailableStatus(authTypes[0],userAuth.AuthTrustLevel.ATL1);if(availStatus!userAuth.UserAuthResultCode.SUCCESS){consterrMsgAuthUtil.getErrorMsg(availStatus);console.error(生物认证不可用:${errMsg});returnundefined;}// 3. 执行认证returnnewPromise((resolve){AuthUtil.onStart(authTypes,userAuth.AuthTrustLevel.ATL1,{onResult:async(result){if(resultuserAuth.UserAuthResultCode.SUCCESS){// 4. 认证成功获取数据constvalueawaitAssetUtil.get(key);resolve(value);}else{resolve(undefined);}}});});}使用示例// 读取存储的 API Token需要生物认证asyncloadApiToken(){consttokenawaitthis.getSecuredData(api_token);if(token){this.apiTokentoken;this.addLog(Security,已通过生物认证读取 API Token,success);}else{this.addLog(Security,认证失败或数据不存在,error);}}// 存储 API TokenasyncsaveApiToken(token:string){if(AssetUtil.canIUse()){awaitAssetUtil.add(api_token,token);this.addLog(Security,API Token 已安全存储,success);}else{this.addLog(Security,设备不支持安全存储,error);}}五、设备兼容性处理asyncinitSecureStorage(){if(AssetUtil.canIUse()){// 支持关键资产存储更安全卸载后保留this.storageTypeAssetUtil;this.addLog(Init,使用关键资产存储Keychain级别,info);}else{// 降级为 Preferences卸载后数据清除this.storageTypePreferences;this.addLog(Init,降级使用 Preferences 存储,warn);}}六、实际业务场景场景存储内容认证要求账号密码管理器密码明文/加密密文ATL3强认证支付 PIN 验证支付密钥ATL2中等认证自动登录 TokenRefresh TokenATL1基础认证应用解锁解锁状态标记ATL1证书管理数字证书ATL3七、小结工具职责核心方法AssetUtil敏感数据安全存储Keychain级别add/get/remove/canIUseAuthUtil生物认证身份验证getAvailableStatus/onStart/cancel将两者联动使用可以构建出存储安全数据加密存储且支持卸载后持久化AssetUtil访问安全读取前必须通过生物认证AuthUtil这是 HarmonyOS 应用数据安全的标准实践也是用户隐私保护的重要一环。