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中按格式聲明。
滿足用戶可知。應用申請的敏感權限的目的需要真實準確告知用戶。
權限就近申請。應用在用戶觸發相關業務功能時,就近提示用戶授予實現此功能所需的權限。
權限不擴散。在用戶未授權的情況下,不允許提供給其他應用使用。
應用自定義權限防止重名。建議以包名為前綴來命名權限,防止跟系統定義的權限重名。
審核編輯 黃宇
-
鴻蒙
+關注
關注
57文章
2386瀏覽量
42961 -
HarmonyOS
+關注
關注
79文章
1980瀏覽量
30395
發布評論請先 登錄
相關推薦
評論