鸿蒙3.1 基于Token的访问控制

介绍

代码路径: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

你可能感兴趣的:(OpenHarmony,linux,系统安全,鸿蒙系统)