介绍
代码路径:security_access_token: ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。
ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。
应用的Accesstoken信息主要包括应用身份标识APPID、用户ID,应用分身索引、应用APL(Ability Privilege Level)等级、应用权限信息等。每个应用的Accestoken信息由一个32bits的设备内唯一标识符TokenID(Token identity)来标识。
ATM模块主要提供如下功能:
- 提供基于TokenID的应用权限校验机制,应用访问敏感数据或者API时可以检查是否有对应的权限。
- 提供基于TokenID的Accestoken信息查询,应用可以根据TokenID查询自身的APL等级等信息。
目录介绍
/base/security/access_token
├── frameworks # 框架层,基础功能代码存放目录
│ ├── accesstoken # Accesstoken管理框架代码存放目录
│ ├── tokensync # Accesstoken信息同步框架代码存放目录
│ └── common # 框架公共代码存放目录
├── interfaces # 接口层
│ └── innerkits # 内部接口层
│ ├── accesstoken # Accesstoken内部接口代码存放目录
│ ├── nativetoken # nativetoken内部接口代码存放目录
│ └── tokensync # Accesstoken信息同步内部接口代码存放目录
└── services # 服务层├── accesstokenmanager # Accesstoken管理服务代码存放目录└── tokensyncmanager # Accesstoken信息同步服务代码存放目录
基础数据结构
HapTokenInfo
内存中保存token信息的结构,对应到数据库的hap_token_info_table表
class HapTokenInfo final {
public:ATokenAplEnum apl;char ver;int userID;std::string bundleName;int instIndex;std::string appID;std::string deviceID;AccessTokenID tokenID;AccessTokenAttr tokenAttr;
};
appid = 应用包名+证书hash
PermissionPolicySet
存储tokenid和对应权限状态的关系类
TokenID组成
基本类型,tokenid就是一个int型。
typedef unsigned int AccessTokenID;
tokenid主要是如下的四部分组成的
typedef struct {unsigned int tokenUniqueID : 20;unsigned int res : 7;unsigned int type : 2;unsigned int version : 3;
} AccessTokenIDInner;
数据库结构
hap_token_info_table表
主要存储应用的token信息
列名 | 类型 | 备注 |
token_id | integer | |
user_id | integer | |
bundle_name | text | |
inst_index | integer | |
app_id | text | |
device_id | text | |
apl | integer | |