security_access_token:基于 OpenHarmony 的应用权限管理项目

ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。

分支328Tags45
文件最后提交记录最后更新时间
1 天前
2 天前
1 年前
3 年前
11 小时前
11 小时前
11 小时前
2 天前
2 天前
4 天前
4 个月前
3 个月前
4 年前
10 个月前
3 个月前
2 个月前
2 天前
4 天前
2 年前
6 个月前

访问控制部件

简介

ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。

应用的Accesstoken信息主要包括应用身份标识APPID、用户ID,应用分身索引、应用APL(Ability Privilege Level)等级、应用权限信息等。每个应用的Accesstoken信息由一个32bits的设备内唯一标识符TokenID(Token identity)来标识。

ATM模块主要提供如下功能:

  • 提供基于TokenID的应用权限校验机制,应用访问敏感数据或者API时可以检查是否有对应的权限。
  • 提供基于TokenID的Accesstoken信息查询,应用可以根据TokenID查询自身的APL等级等信息。

ATM部件的架构图如下所示:

目录

/base/security/access_token
├── frameworks                  # 框架层,基础功能代码存放目录
│   ├── accesstoken             # Accesstoken管理框架代码存放目录
│   ├── common                  # 框架公共代码存放目录
│   ├── privacy                 # privacy管理框架代码存放目录
│   └── tokensync               # Accesstoken信息同步框架代码存放目录
├── interfaces                  # 接口层
│   └── innerkits               # 内部接口层
│   │   ├── accesstoken         # Accesstoken内部接口代码存放目录
│   │   ├── nativetoken         # nativetoken内部接口代码存放目录
│   │   ├── privacy             # privacy内部接口代码存放目录
│   │   ├── token_callback      # 回调内部接口代码存放目录
│   │   ├── token_setproc       # tokenid内核交互内部接口代码存放目录
│   │   └── tokensync           # Accesstoken信息同步内部接口代码存放目录
│   └── kits                    # 外部接口层
│   │   ├── accesstoken         # Accesstoken外部接口代码存放目录
│   │   ├── common              # 外部接口公共代码存放目录
│   │   └── privacy             # privacy信息外部接口代码存放目录
└── services                    # 服务层
    ├── accesstokenmanager      # Accesstoken管理服务代码存放目录
    ├── privacymanager          # privacy管理服务代码存放目录
    └── tokensyncmanager        # Accesstoken信息同步服务代码存放目录

使用

接口说明

接口申明 接口描述
AccessTokenIDEx AllocHapToken(const HapInfoParams& info, const HapPolicyParams& policy); 为应用进程分配一个tokenID
FullTokenID AllocLocalTokenID(const std::string& remoteDeviceID, AccessTokenID remoteTokenID); 为远端设备的应用进程分配一个本地tokenID
int UpdateHapToken(AccessTokenIDEx& tokenIdEx, bool isSystemApp, const std::string& appIDDesc, int32_t apiVersion, const HapPolicyParams& policy); 更新tokenId对应的tokenInfo信息
int DeleteToken(AccessTokenID tokenID); 删除应用tokenID及其对应的tokenInfo信息
int GetTokenType(AccessTokenID tokenID); 查询指定tokenID的类型
int GetTokenTypeFlag(AccessTokenID tokenID); 查询指定可信tokenID的类型
int GetTokenType(FullTokenID tokenID); 查询指定tokenID的类型
int GetTokenTypeFlag(FullTokenID tokenID); 查询指定可信tokenID的类型
AccessTokenID GetHapTokenID(int32_t userID, const std::string& bundleName, int32_t instIndex); 查询指定应用的tokenId
AccessTokenIDEx GetHapTokenIDEx(int32_t userID, const std::string& bundleName, int32_t instIndex); 查询指定应用的tokenIDEx
int GetHapTokenInfo(AccessTokenID tokenID, HapTokenInfo& hapTokenInfoRes); 查询指定tokenID对应的hap包的tokenInfo信息
int GetNativeTokenInfo(AccessTokenID tokenID, NativeTokenInfo& nativeTokenInfoRes); 查询指定tokenID对应的native的tokenInfo信息
int VerifyAccessToken(AccessTokenID tokenID, const std::string& permissionName); 检查指定tokenID是否具有指定权限
int GetDefPermission(const std::string& permissionName, PermissionDef& permissionDefResult); 查询指定权限的权限定义信息
int GetReqPermissions(AccessTokenID tokenID, std::vector<PermissionStateFull>& reqPermList, bool isSystemGrant); 查询指定tokenID对应的hap包申请的权限状态集合
int GetPermissionFlag(AccessTokenID tokenID, const std::string& permissionName); 查询指定tokenID的应用的指定权限
int GrantPermission(AccessTokenID tokenID, const std::string& permissionName, int flag); 授予指定tokenID的应用的指定权限
int RevokePermission(AccessTokenID tokenID, const std::string& permissionName, int flag); 撤销指定tokenID的应用的指定权限
int GrantPermissionForSpecifiedTime(AccessTokenID tokenID, const std::string& permissionName, uint32_t onceTime, uint32_t maxTime); 授权指定tokenID的应用固定授权时间的指定权限
int ClearUserGrantedPermissionState(AccessTokenID tokenID); 清空指定tokenID的应用的user_grant权限状态
uint64_t GetAccessTokenId(const char *processname, const char **dcap, int32_t dacpNum, const char *aplStr); 创建获取native进程的tokenId

使用说明

ATM提供了统一的应用权限访问控制功能,支持应用程序或者SA查询校验应用权限、APL等信息。从使用者角度,可以分为基于native进程启动的SA和应用Hap两类使用者。

native进程

  • 在native进程拉起前,需要调用GetAccessTokenId函数,获取该native进程的TokenID;再调用SetSelfTokenID将进程TokenID设置到内核中。

应用hap

  • 在应用安装时,需要调用AllocHapToken创建获取该应用的TokenID。
  • 在应用运行过程中,需要进行鉴权等操作时,可调用VerifyAccessToken、GetReqPermissions等函数查询校验应用权限、APL等信息。
  • 在应用卸载时,需要调用DeleteToken函数删除系统中管理的对应Accesstoken信息。

代码开发说明

  • 修改后的函数长度超过 50 行时,必须进行函数提取与重构。
  • 每个新增或修改后的函数目标长度不超过 50 行。
  • 优先提取准备逻辑、公共断言逻辑、清理逻辑,避免单个函数承担过多职责。
  • 该规范同时适用于正式代码与测试代码。

相关仓

startup_init_lite

security_access_token

项目介绍

ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。

定制我的领域