一.简介
当应用程序需要访问用户数据或设备功能时,操作系统会要求应用请求相应的权限。 这些权限分为两类:一是访问个人数据,如照片、联系人、位置等;二是使用设备功能,如摄像头、麦克风、联网能力等。这种权限系统的存在是为了保护用户的隐私和设备的安全,确保敏感信息和功能不被未经授权的应用滥用或恶意利用。
在开发应用程序时,理解并正确管理这些权限是非常重要的,可以通过操作系统提供的文档和指导来学习如何合理请求和使用这些权限。
二.TokenID
系统使用TokenID作为应用的唯一标识,用于管理应用的访问令牌(Access Token,AT)。每个应用都有自己的TokenID,其中包含了应用的身份标识(APP ID)、子用户ID、应用分身索引信息、应用权限级别(APL)以及应用权限授权状态等信息。
在资源使用时,系统通过TokenID来获取对应应用的权限授权状态信息,并根据这些信息进行鉴权,以控制应用对资源的访问行为。这种机制确保了每个应用在访问系统资源时都遵循预先设定的权限规则和安全策略。
特别要注意的是,系统支持多用户和应用分身的特性。这意味着同一个应用在不同的子用户账户或不同的应用身份下,会有独立的Access Token(AT),而这些AT的TokenID也是不同的,从而确保了各个身份的隔离和安全性。
三.APL 等级
为了防止应用过度索取和滥用权限,系统引入了元能力权限等级(APL)。元能力权限等级定义了应用在系统中申请权限的优先级和范围,不同的APL等级决定了应用能够申请和获取的权限的不同程度。
具体来说,每个应用在注册或者运行时会被分配一个特定的APL等级。这个等级反映了应用所需权限的合理性和紧急性。系统根据这些等级来决定对应用请求的权限是否授予,以及授予的权限范围和深度。
通过配置不同的APL等级,系统能够精确地管理和控制应用对系统资源的访问,确保敏感数据和设备功能不被未经授权的应用滥用。这种权限管理策略有效地平衡了应用的功能需求与用户隐私及系统安全之间的关系。
1.应用APL等级
应用的等级可以分为以下三个等级,等级依次提高
2.权限APL等级
分居权限对于不同等级应用有不同的开放范围,权限类型对应分为以下三个等级,等级依次提高
四.授权方式
根据授权方式的不同,授权类型可分为system_grant(系统授权)和user_grant(用户授权)。
1.system_grant (系统授权)
为了防止应用过度索取和滥用权限,系统引入了元能力权限等级(APL)。元能力权限等级定义了应用在系统中申请权限的优先级和范围,不同的APL等级决定了应用能够申请和获取的权限的不同程度。
具体来说,每个应用在注册或者运行时会被分配一个特定的APL等级。这个等级反映了应用所需权限的合理性和紧急性。系统根据这些等级来决定对应用请求的权限是否授予,以及授予的权限范围和深度。
通过配置不同的APL等级,系统能够精确地管理和控制应用对系统资源的访问,确保敏感数据和设备功能不被未经授权的应用滥用。这种权限管理策略有效地平衡了应用的功能需求与用户隐私及系统安全之间的关系。
2.user_grant (用户授权)
"user_grant" 指的是一种用户授权类型的权限。在这种权限许可下,应用被允许访问的数据可能涉及到用户或设备的敏感信息,以及执行可能对系统或其他应用产生重大影响的操作。
这类权限通常要求应用在安装包中申请权限,并且在应用动态运行时,通过发送弹窗的方式请求用户授权。只有用户手动允许授权后,应用才能真正获取相应的权限,从而成功地访问和操作目标对象。
举例来说,麦克风和摄像头权限属于用户授权权限类型。在应用权限列表中,这些权限会被列出,并提供详细的权限使用理由。在应用发布到应用商店的详情页面时,开发者需要清楚地向用户展示所申请的user_grant权限列表,以便用户理解应用所需的权限并做出相应的授权决定。
五.权限组和子权限
系统为了改善用户体验,将逻辑上相关的 user_grant 权限组合成多个权限组,并在应用请求权限时,将同一权限组内的权限一起显示在一个弹窗中请求用户授权。
在这种设计下,权限组中的每个权限被称为该权限组的子权限。需要注意的是,权限组和权限之间的归属关系并非固定不变的,某个权限可能随着系统更新或其他因素而改变所属的权限组。
当前系统支持的权限组信息可以在应用权限列表中查看。这种组织权限的方式有助于简化用户的授权体验,减少系统弹出的权限弹窗数量,同时使用户更清楚地理解应用所请求的权限及其目的。
六.访问控制列表ACL
理解系统中权限等级(APL)和访问控制列表(ACL)的关系是非常重要的。
1. 权限等级(APL)和应用权限申请:
每个应用在注册或运行时都会被分配一个特定的权限等级(APL)。这个等级决定了应用能够申请和获取的权限的范围和级别。 原则上,拥有低APL等级的应用默认无法申请更高等级的权限,这是为了确保系统安全和用户隐私的基本原则。
2. 访问控制列表(ACL) :
访问控制列表是一种特殊的机制,用于解决低等级应用访问高等级权限的问题。具体来说,系统中的每个权限都可以定义一个“ACL使能”字段。 当某个权限的ACL使能为TRUE时,即表示该权限允许通过ACL方式跨越应用的APL等级限制,允许低APL等级的应用申请该高等级权限。
3. 使用场景举例:
假设开发者正在开发一个权限等级为normal的应用 A。 应用 A 需要访问一个等级为system_basic的权限 P,但是系统规定普通等级的应用无法直接申请system_basic权限。 如果权限 P 的ACL使能为TRUE,应用 A 就可以通过ACL方式申请权限 P,即使它的APL等级较低。
通过ACL机制,系统可以在需要的情况下允许特定应用跨越权限等级的限制,以支持特定的功能场景或业务需求。这种机制的应用需要谨慎管理,确保权限的跨级申请是合理且安全的,同时保护用户数据和系统的整体安全性。
七.权限使用的基本原则
在开发应用程序时,应该遵循以下原则来合理申请和使用权限:
1. 严格声明所需权限:
应用及其引用的第三方库必须在配置文件中按照权限开发指南逐个声明所需的权限。这意味着在开发过程中要明确列出每个权限,并在配置文件中进行声明。
2. 最小化原则:
权限申请应该最小化,禁止申请非必要的、已废弃的权限。过多的权限申请会增加用户对应用安全性的疑虑,并可能导致使用体验的下降,从而影响应用的安装率和用户留存率。
3. 填写权限使用理由:
当应用申请敏感权限时,必须提供清晰明确的权限使用理由。敏感权限包括与用户隐私密切相关的权限,如地理位置、相机、麦克风、日历、健身运动、身体传感器、音乐、文件、图片视频等。这些理由应当向用户解释为何应用需要访问这些信息或功能。
4. 动态申请敏感权限:
敏感权限应在应用需要执行相关业务功能之前动态申请。这符合隐私最小化的要求,确保用户理解并授权应用访问其敏感信息或设备功能的目的。
5. 处理权限拒绝情况:
如果用户拒绝授予某个权限,应用必须允许用户继续使用与该权限无关的其他业务功能。这意味着应用需要设计良好,能够在权限被拒绝时提供良好的替代体验,同时尊重用户的选择和隐私。
遵循以上原则有助于开发出用户友好且安全的应用程序,提升用户体验并降低权限滥用的风险。