鸿蒙os系统使⽤技巧,鸿蒙OS应⽤权限管理
更新鸿蒙系统HarmonyOS 中所有的应⽤均在应⽤沙盒内运⾏。默认情况下,应⽤只能访问有限的系统资源,系统负责管理应⽤对资源的访问权限。
应⽤权限管理是由接⼝提供⽅(Ability)、接⼝使⽤⽅(应⽤)、系统(包括云侧和端侧)以及⽤户等多⽅共同参与的整个流程,保证受限接⼝是在约定好的规则下被正常使⽤,避免接⼝被滥⽤⽽导致⽤户、应⽤和设备受损。
权限声明
应⽤需要在 config.json 中使⽤“reqPermissions”属性对需要的权限逐个进⾏声明。
若使⽤到的三⽅库也涉及权限使⽤,也需统⼀在应⽤的config.json中逐个声明。
没有在config.json中声明的权限,应⽤就⽆法获得此权限的授权。
动态申请敏感权限
动态申请敏感权限基于⽤户可知可控的原则,需要应⽤在运⾏时主动调⽤系统动态申请权限的接⼝,系统
弹框由⽤户授权,⽤户结合应⽤运⾏场景的上下⽂,识别出应⽤申请相应敏感权限的合理性,从⽽做出正确的选择。
即使⽤户向应⽤授予了请求的权限,应⽤在调⽤受此权限管控的接⼝前,也应该先检查⾃⼰有⽆此权限,⽽不能把之前授予的状态持久化,因为⽤户在动态授予后还可以通过设置取消应⽤的权限。
有关于应⽤动态申请敏感权限的详细信息,请参阅动态申请权限。
⾃定义权限
HarmonyOS 为了保证应⽤对外提供的接⼝不被恶意调⽤,需要对调⽤接⼝的调⽤者进⾏鉴权。
⼤多情况下,系统已定义的权限满⾜了应⽤的基本需要,若有特殊的访问控制需要,应⽤可在config.json中以"defPermissions": []属性来定义新的权限,并通过“availableScope”和“grantMode”两个属性分别确定权限的开放范围和授权⽅式,使得权限定义更加灵活且易于理解。有关 HarmonyOS 权限开放范围和授权⽅式详细的描述,请参阅权限授予⽅式字段说明和权限限制范围字段说明。
为了避免应⽤⾃定义新权限出现重名的情况,建议应⽤对新权限的命名以包名的前两个字段开头,这样可以防⽌不同开发者的应⽤间出现⾃定义权限重名的情况。
权限保护⽅法
保护 Ability:通过在config.json⾥对应的 Ability 中配置"permissions": ["权限名"]属性,即可实现保护整个 Ability 的⽬的,⽆指定权限的应⽤不能访问此 Ability。
保护 API:若 Ability 对外提供的数据或能⼒有多种,且开放范围或保护级别也不同,可以针对不同的数据或能⼒在接⼝代码实现中通过verifyPermission(String permissionName, int pid, int uid)来对 uid 标识的调⽤者进⾏鉴权。
权限使⽤原则
权限申请最⼩化。跟⽤户提供的功能⽆关的权限,不要申请;尽量采⽤其他⽆需权限的操作来实现相应功能(如:通过intent拉起系统 UI 界⾯由⽤户交互、应⽤⾃⼰⽣成uuid代替设备 ID 等)。
权限申请完整。应⽤所需权限(包括应⽤调⽤到的三⽅库依赖的权限)都要逐个在应⽤的config.json中按格式声明。
满⾜⽤户可知。应⽤申请的敏感权限的⽬的需要真实准确告知⽤户。
权限就近申请。应⽤在⽤户触发相关业务功能时,就近提⽰⽤户授予实现此功能所需的权限。
权限不扩散。在⽤户未授权的情况下,不允许提供给其他应⽤使⽤。
应⽤⾃定义权限防⽌重名。建议以包名为前缀来命名权限,防⽌跟系统定义的权限重名。