鸿蒙HarmonyOS开发实战—安全管理(权限开发)_鸿蒙 权限

自定义权限

HarmonyOS为了保证应用对外提供的接口不被恶意调用,需要对调用接口的调用者进行鉴权。

大多情况下,系统已定义的权限满足了应用的基本需要,若有特殊的访问控制需要,应用可在config.json中以"defPermissions": []属性来定义新的权限,并通过“availableScope”和“grantMode”两个属性分别确定权限的开放范围和授权方式,使得权限定义更加灵活且易于理解。

为了避免应用自定义新权限出现重名的情况,建议应用对新权限的命名以包名的前两个字段开头,这样可以防止不同开发者的应用间出现自定义权限重名的情况。

权限保护方法
  • 保护Ability:通过在config.json里对应的Ability中配置"permissions": [“权限名”]属性,即可实现保护整个Ability的目的,无指定权限的应用不能访问此Ability。
  • 保护API:若Ability对外提供的数据或能力有多种,且开放范围或保护级别也不同,可以针对不同的数据或能力在接口代码实现中通过verifyPermission(String permissionName, int pid, int uid)来对uid标识的调用者进行鉴权。
约束与限制
  • 同一应用自定义权限个数不能超过1024个。
  • 同一应用申请权限个数不能超过1024个。
  • 为避免与系统权限名冲突,应用自定义权限名不能以ohos开头,且权限名长度不能超过256字符。
  • 自定义权限授予方式不能为user_grant。
  • 自定义权限开放范围不能为restricted。
权限开发
场景介绍

HarmonyOS支持开发者自定义权限来保护能力或接口,同时开发者也可申请权限来访问受权限保护的对象。

权限申请

开发者需要在config.json文件中的“reqPermissions”字段中声明所需要的权限。

{
    "module": {
        "reqPermissions": [
            {
                "name": "ohos.permission.CAMERA",
                "reason": "$string:permreason_camera",
                "usedScene": 
                {
                    "ability": ["com.mycamera.Ability", "com.mycamera.AbilityBackground"],
                    "when": "always"
                }
            },{
            ...
            }
        ]
    }
}

权限申请格式采用数组格式,可支持同时申请多个权限,权限个数最多不能超过1024个。

值说明 类型 取值范围 默认值 规则约束
name 必须,填写需要使用的权限名称。 字符串 自定义 未填写时,解析失败。
reason 可选,当申请的权限为user_grant权限时此字段必填。 描述申请权限的原因。 字符串 显示文字长度不能超过256个字节。 user_grant权限必填,否则不允许在应用市场上架。 需做多语种适配。
usedScene 可选,当申请的权限为user_grant权限时此字段必填。 描述权限使用的场景和时机。场景类型有:ability、when(调用时机)。可配置多个ability。 ability:字符串数组 when:字符串 ability:ability的名称 when:inuse(使用时)、always(始终) ability:空 when:inuse user_grant权限必填ability,可选填when。

如果声明使用的权限的grantMode是system_grant,则权限会在当应用安装的时候被自动授予。

如果声明使用的权限的grantMode是user_grant,则必须经用户手动授权(用户在弹框中授权或进入权限设置界面授权)才可使用。用户会看到reason字段中填写的理由,来帮助用户决定是否给予授权。

说明 对于授权方式为user

你可能感兴趣的:(harmonyos,安全,华为)