HarmonyOS 为了保证应用对外提供的接口不被恶意调用,需要对调用接口的调用者进行 鉴权。 大多情况下,系统已定义的权限满足了应用的基本需要,若有特殊的访问控制需要,应用 可在 config.json 中以”defPermissions”: []属性来定义新的权限,并通过 availableScope 和 grantMode 两个属性分别确定权限的开放范围和授权方式,使得权限定义更加灵活且易于理 解。 为了避免应用自定义新权限出现重名的情况,建议应用对新权限的命名以包名的前两个字 段开头,这样可以防止不同开发者的应用间出现自定义权限重名的情况
权限保护方法
保护 Ability:通过在 config.json 里对应的 Ability 中配置”permissions”: [“权限名“]属 性,即可实现保护整个 Ability 的目的,无指定权限的应用不能访问此 Ability。 保护 API:若 Ability 对外提供的数据或能力有多种,且开放范围或保护级别也不同,可 以针对不同的数据或能力在接口代码实现中通过 verifyPermission(String permissionName, int pid, int uid)来对 uid 标识的调用者进行鉴权。
权限使用原则
权限申请最小化。跟用户提供的功能无关的权限,不要申请;尽量采用其他无需权限的操 作来实现相应功能(如:通过 intent 拉起系统 UI 界面由用户交互、应用自己生成 uuid 代替设备 ID 等)。 权限申请完整。应用所需权限(包括应用调用到的三方库依赖的权限)都要逐个在应用的 config.json 中按格式声明。 满足用户可知。应用申请的敏感权限的目的需要真实准确告知用户。 权限就近申请。应用在用户触发相关业务功能时,就近提示用户授予实现此功能所需的权 限。 权限不扩散。在用户未授权的情况下,不允许提供给其他应用使用。 应用自定义权限防止重名。建议以包名为前缀来命名权限,防止跟系统定义的权限重名。