HarmonyOS 中所有的应用均在应用沙盒内运行。默认情况下,应用只能访问有限的系统资源,系统负责管理应用对资源的访问权限。
应用权限管理是由接口提供方(Ability)、接口使用方(应用)、系统(包括云侧和端侧)以及用户等多方共同参与的整个流程,保证受限接口是在约定好的规则下被正常使用,避免接口被滥用而导致用户、应用和设备受损。
config.json
中使用“reqPermissions
”属性对需要的权限逐个进行声明。config.json
中逐个声明。config.json
中声明的权限,应用就无法获得此权限的授权。
动态申请敏感权限基于用户可知可控的原则,需要应用在运行时主动调用系统动态申请权限的接口,系统弹框由用户授权,用户结合应用运行场景的上下文,识别出应用申请相应敏感权限的合理性,从而做出正确的选择。
即使用户向应用授予了请求的权限,应用在调用受此权限管控的接口前,也应该先检查自己有无此权限,而不能把之前授予的状态持久化,因为用户在动态授予后还可以通过设置取消应用的权限。
有关于应用动态申请敏感权限的详细信息,请参阅动态申请权限。
HarmonyOS 为了保证应用对外提供的接口不被恶意调用,需要对调用接口的调用者进行鉴权。
大多情况下,系统已定义的权限满足了应用的基本需要,若有特殊的访问控制需要,应用可在config.json
中以"defPermissions": []
属性来定义新的权限,并通过“availableScope
”和“grantMode
”两个属性分别确定权限的开放范围和授权方式,使得权限定义更加灵活且易于理解。有关 HarmonyOS 权限开放范围和授权方式详细的描述,请参阅权限授予方式字段说明和权限限制范围字段说明。
为了避免应用自定义新权限出现重名的情况,建议应用对新权限的命名以包名的前两个字段开头,这样可以防止不同开发者的应用间出现自定义权限重名的情况。
config.json
里对应的 Ability 中配置"permissions": ["权限名"]属性,即可实现保护整个 Ability 的目的,无指定权限的应用不能访问此 Ability。verifyPermission
(String permissionName
, int pid
, int uid
)来对 uid 标识的调用者进行鉴权。
intent
拉起系统 UI 界面由用户交互、应用自己生成uuid
代替设备 ID 等)。config.json
中按格式声明。