auth-module-architecture

模块定位: Auth 是 BK-CI 的权限认证核心模块,负责用户认证、权限校验、用户组管理、OAuth2 认证等功能,采用 RBAC(基于角色的访问控制)模型。

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "auth-module-architecture" with this command: npx skills add tencentblueking/bk-ci/tencentblueking-bk-ci-auth-module-architecture

Auth 权限认证模块架构指南

模块定位: Auth 是 BK-CI 的权限认证核心模块,负责用户认证、权限校验、用户组管理、OAuth2 认证等功能,采用 RBAC(基于角色的访问控制)模型。

一、模块整体结构

1.1 子模块划分

src/backend/ci/core/auth/ ├── api-auth/ # API 接口定义层 │ └── src/main/kotlin/com/tencent/devops/auth/ │ ├── api/ │ │ ├── callback/ # 回调接口(IAM、ITSM) │ │ ├── login/ # 登录接口 │ │ ├── manager/ # 管理员接口 │ │ ├── migrate/ # 迁移接口 │ │ ├── oauth2/ # OAuth2 接口 │ │ ├── op/ # 运维接口 │ │ ├── open/ # 开放接口 │ │ ├── service/ # 服务间调用接口 │ │ ├── sync/ # 同步接口 │ │ └── user/ # 用户接口 │ ├── constant/ # 常量定义 │ └── pojo/ # 数据对象 │ ├── biz-auth/ # 业务逻辑层 │ └── src/main/kotlin/com/tencent/devops/auth/ │ ├── aspect/ # AOP 切面 │ ├── common/ # 通用配置 │ ├── cron/ # 定时任务 │ ├── dao/ # 数据访问层(40+ 文件) │ ├── entity/ # 实体定义 │ ├── filter/ # 过滤器 │ ├── provider/ │ │ ├── rbac/ # RBAC 实现(核心) │ │ └── sample/ # 示例实现 │ ├── refresh/ # 刷新机制 │ ├── resources/ # API 实现 │ ├── service/ # 业务服务(30+ 文件) │ ├── sharding/ # 分片策略 │ └── utils/ # 工具类 │ ├── boot-auth/ # Spring Boot 启动模块 └── model-auth/ # 数据模型层(JOOQ 生成)

1.2 模块职责矩阵

模块 职责 核心类数量

api-auth REST API 接口定义 50+

biz-auth 业务逻辑、RBAC 实现 150+

model-auth JOOQ 数据模型 自动生成

二、核心概念

2.1 RBAC 权限模型

┌─────────────────────────────────────────────────────────────────────────┐ │ BK-CI RBAC 权限模型 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ 用户 │────►│ 用户组 │────►│ 权限策略 │ │ │ │ (User) │ │ (Group) │ │ (Policy) │ │ │ └──────────┘ └──────────────┘ └──────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌──────────────────┐ │ │ │ │ │ 操作 │ │ │ │ │ │ (Action) │ │ │ │ │ │ create/view/edit │ │ │ │ │ │ delete/execute │ │ │ │ │ └────────┬─────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ 资源 (Resource) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ project │ │pipeline │ │ repo │ │ env │ ... │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘

2.2 核心实体关系

实体 说明 对应表

用户 (User) 系统用户 T_AUTH_USER_INFO

用户组 (Group) 权限组,关联权限策略 T_AUTH_RESOURCE_GROUP

组成员 (Member) 用户组成员关系 T_AUTH_RESOURCE_GROUP_MEMBER

资源 (Resource) 被管理的资源 T_AUTH_RESOURCE

操作 (Action) 资源上的操作 T_AUTH_ACTION

权限 (Permission) 组对资源的权限 T_AUTH_RESOURCE_GROUP_PERMISSION

2.3 默认用户组类型

enum class DefaultGroupType { MANAGER, // 管理员组 DEVELOPER, // 开发人员组 MAINTAINER, // 运维人员组 TESTER, // 测试人员组 PM, // 产品人员组 QC, // 质量管理员组 VIEWER // 查看者组 }

三、分层架构图

┌─────────────────────────────────────────────────────────────────────────┐ │ 请求入口 │ │ HTTP Request / 服务间调用 / IAM 回调 / OAuth2 │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ API 层 (api-auth) │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │UserAuth │ │ServicePerm │ │OpenProject │ │Oauth2Service │ │ │ │ApplyResource │ │AuthResource │ │AuthResource │ │EndpointRes │ │ │ │(用户权限申请) │ │(服务间鉴权) │ │(开放项目权限) │ │(OAuth2认证) │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 业务层 (biz-auth) │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ ResourceImpl 实现层 │ │ │ │ ServicePermissionAuthResourceImpl | OpenProjectAuthResourceImpl │ │ │ └──────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ RBAC Provider 层 (核心) │ │ │ │ RbacPermissionService - 权限校验核心服务 │ │ │ │ RbacPermissionResourceGroupService - 用户组管理服务 │ │ │ │ RbacPermissionResourceMemberService - 组成员管理服务 │ │ │ │ RbacPermissionResourceService - 资源管理服务 │ │ │ │ PermissionGradeManagerService - 分级管理员服务 │ │ │ └──────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ 通用 Service 层 │ │ │ │ PermissionAuthorizationService - 授权服务 │ │ │ │ AuthDeptServiceImpl - 部门服务 │ │ │ │ ManagerUserService - 管理员用户服务 │ │ │ │ StrategyService - 策略服务 │ │ │ │ AuthMonitorSpaceService - 监控空间服务 │ │ │ └──────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ DAO 层 (biz-auth/dao) │ │ AuthResourceGroupDao | AuthResourceGroupMemberDao | AuthResourceDao │ │ AuthAuthorizationDao | AuthOauth2ClientDetailsDao | ... │ └─────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 数据层 (model-auth + MySQL) │ │ 数据库:devops_ci_auth(共 30+ 张表) │ └─────────────────────────────────────────────────────────────────────────┘

四、核心数据库表

4.1 用户组相关表

表名 说明 核心字段

T_AUTH_RESOURCE_GROUP

资源用户组 ID , PROJECT_CODE , RESOURCE_TYPE , RESOURCE_CODE , GROUP_CODE , GROUP_NAME , IAM_GROUP_ID

T_AUTH_RESOURCE_GROUP_MEMBER

组成员关系 ID , PROJECT_CODE , IAM_GROUP_ID , MEMBER_ID , MEMBER_TYPE , EXPIRED_TIME

T_AUTH_RESOURCE_GROUP_PERMISSION

组权限 ID , PROJECT_CODE , RESOURCE_TYPE , IAM_GROUP_ID , ACTION , RESOURCE_CODE

T_AUTH_RESOURCE_GROUP_CONFIG

组配置 ID , RESOURCE_TYPE , GROUP_CODE , GROUP_NAME , ACTIONS

4.2 资源相关表

表名 说明 核心字段

T_AUTH_RESOURCE

资源信息 ID , PROJECT_CODE , RESOURCE_TYPE , RESOURCE_CODE , RESOURCE_NAME , IAM_RESOURCE_CODE

T_AUTH_RESOURCE_TYPE

资源类型 ID , RESOURCE_TYPE , NAME , PARENT , SYSTEM

T_AUTH_ACTION

操作定义 ACTION , RESOURCE_TYPE , ACTION_NAME , ACTION_TYPE

4.3 授权相关表

表名 说明 核心字段

T_AUTH_AUTHORIZATION

资源授权 ID , PROJECT_CODE , RESOURCE_TYPE , RESOURCE_CODE , HANDOVER_FROM , HANDOVER_TO

T_AUTH_IAM_CALLBACK

IAM 回调 ID , GATEWAY , PATH , RESOURCE , SYSTEM

4.4 OAuth2 相关表

表名 说明

T_AUTH_OAUTH2_CLIENT_DETAILS

OAuth2 客户端信息

T_AUTH_OAUTH2_ACCESS_TOKEN

访问令牌

T_AUTH_OAUTH2_REFRESH_TOKEN

刷新令牌

T_AUTH_OAUTH2_CODE

授权码

T_AUTH_OAUTH2_SCOPE

授权范围

五、核心类速查

5.1 API 接口层

类名 路径前缀 职责

ServicePermissionAuthResource

/service/auth/permission

服务间权限校验

ServiceProjectAuthResource

/service/auth/project

服务间项目权限

ServiceResourceGroupResource

/service/auth/resource/group

用户组管理

ServiceResourceMemberResource

/service/auth/resource/member

组成员管理

UserAuthApplyResource

/user/auth/apply

用户权限申请

UserAuthAuthorizationResource

/user/auth/authorization

用户授权管理

OpenPermissionAuthResource

/open/auth/permission

开放权限接口

OpenProjectAuthResource

/open/auth/project

开放项目权限

Oauth2ServiceEndpointResource

/service/oauth2

OAuth2 服务端点

5.2 RBAC Provider 层(核心服务)

类名 文件大小 职责

RbacPermissionService

32KB 权限校验核心,对接 IAM SDK

RbacPermissionResourceGroupService

33KB 用户组 CRUD 管理

RbacPermissionResourceMemberService

29KB 组成员管理

RbacPermissionResourceService

21KB 资源注册与管理

RbacPermissionManageFacadeServiceImpl

117KB 权限管理门面(最大)

RbacPermissionResourceGroupPermissionService

39KB 组权限管理

RbacPermissionResourceGroupSyncService

37KB 组同步服务

PermissionGradeManagerService

27KB 分级管理员

RbacPermissionApplyService

30KB 权限申请服务

5.3 通用 Service 层

类名 职责

PermissionAuthorizationServiceImpl

资源授权(代持人)管理

AuthDeptServiceImpl

部门信息服务

ManagerUserService

超级管理员管理

StrategyService

权限策略管理

ThirdLoginService

第三方登录

AuthUserBlackListService

用户黑名单

5.4 DAO 层

类名 文件大小 职责

AuthResourceGroupMemberDao

34KB 组成员数据访问(最大)

AuthResourceGroupDao

19KB 用户组数据访问

AuthResourceDao

15KB 资源数据访问

AuthResourceGroupPermissionDao

11KB 组权限数据访问

AuthAuthorizationDao

10KB 授权数据访问

六、核心流程

6.1 权限校验流程

用户请求 │ ▼ ServicePermissionAuthResource.validateUserResourcePermission() │ ▼ ServicePermissionAuthResourceImpl │ ▼ RbacPermissionService.validateUserResourcePermission() │ ├─► 检查是否超级管理员 (SuperManagerService) ├─► 检查项目成员缓存 (BkInternalPermissionCache) │ ▼ AuthHelper.isAllowed() ← IAM SDK │ ├─► 构建 ActionDTO (操作) ├─► 构建 ResourceDTO (资源) └─► 调用 IAM 策略引擎

6.2 用户组创建流程

UserAuthApplyResource.createGroup() │ ▼ RbacPermissionResourceGroupService.createGroup() │ ├─► 校验组名长度 (5-32字符) ├─► 检查组名是否重复 │ ▼ iamV2ManagerService.createRoleGroup() ← IAM SDK │ ▼ authResourceGroupDao.create() ← 保存到本地数据库 │ ▼ permissionResourceGroupPermissionService.grantGroupPermission() ← 授予权限

6.3 OAuth2 认证流程

┌─────────────────────────────────────────────────────────────────┐ │ OAuth2 授权码模式 │ ├─────────────────────────────────────────────────────────────────┤ │ 1. 客户端请求授权 │ │ GET /oauth2/authorize?client_id=xxx&redirect_uri=xxx │ │ │ │ │ ▼ │ │ 2. 用户登录并授权 │ │ Oauth2DesktopEndpointResource.authorize() │ │ │ │ │ ▼ │ │ 3. 返回授权码 │ │ redirect_uri?code=xxx │ │ │ │ │ ▼ │ │ 4. 客户端用授权码换取 Token │ │ POST /oauth2/token │ │ Oauth2ServiceEndpointResource.getToken() │ │ │ │ │ ▼ │ │ 5. 返回 Access Token + Refresh Token │ └─────────────────────────────────────────────────────────────────┘

七、与 IAM 集成

7.1 IAM SDK 依赖

Auth 模块深度集成腾讯蓝鲸 IAM(权限中心),核心依赖:

// IAM SDK 核心类 import com.tencent.bk.sdk.iam.config.IamConfiguration import com.tencent.bk.sdk.iam.helper.AuthHelper import com.tencent.bk.sdk.iam.service.PolicyService import com.tencent.bk.sdk.iam.service.v2.V2ManagerService

7.2 IAM 回调接口

// 资源回调接口 - IAM 拉取资源信息 @Path("/open/auth/resource/callback") interface OpenAuthResourceCallBackResource { fun getResource(...) // 获取资源详情 fun listResource(...) // 列出资源 fun searchResource(...) // 搜索资源 }

7.3 资源类型定义

enum class AuthResourceType(val value: String) { PROJECT("project"), // 项目 PIPELINE_DEFAULT("pipeline"), // 流水线 PIPELINE_GROUP("pipeline_group"), // 流水线组 PIPELINE_TEMPLATE("pipeline_template"),// 流水线模板 CREDENTIAL("credential"), // 凭证 CERT("cert"), // 证书 CGS("cgs"), // 代码扫描 ENVIRONMENT_ENVIRONMENT("environment"),// 环境 ENVIRONMENT_ENV_NODE("env_node"), // 环境节点 CODE_REPERTORY("repertory"), // 代码库 EXPERIENCE_TASK("experience_task"), // 体验任务 EXPERIENCE_GROUP("experience_group"), // 体验组 QUALITY_RULE("rule"), // 质量规则 QUALITY_GROUP("quality_group"), // 质量红线组 }

八、配置说明

8.1 RBAC 配置类

// 位置:biz-auth/provider/rbac/config/RbacAuthConfiguration.kt (37KB) @Configuration class RbacAuthConfiguration { // IAM 客户端配置 // 权限服务 Bean 定义 // 缓存配置 }

8.2 MQ 配置

// 位置:biz-auth/provider/rbac/config/RbacMQConfiguration.kt // 定义权限相关的消息队列 // - 组创建事件 // - 组修改事件 // - ITSM 回调事件 // - 权限同步事件

九、开发规范

9.1 新增权限操作

  • 在 T_AUTH_ACTION 表添加操作定义

  • 在 AuthPermission 枚举中添加对应值

  • 在 IAM 系统注册操作

  • 更新 RbacAuthUtils.buildAction() 映射

9.2 新增资源类型

  • 在 AuthResourceType 枚举中添加类型

  • 在 T_AUTH_RESOURCE_TYPE 表添加记录

  • 实现 AuthResourceCallBackResource 回调接口

  • 在 IAM 系统注册资源类型

9.3 权限校验示例

// 服务间调用校验权限 client.get(ServicePermissionAuthResource::class).validateUserResourcePermission( userId = userId, token = token, action = AuthPermission.EXECUTE.value, projectCode = projectCode, resourceCode = AuthResourceType.PIPELINE_DEFAULT.value )

// 使用 AuthPermissionApi authPermissionApi.validateUserResourcePermission( user = userId, serviceCode = authServiceCode, resourceType = AuthResourceType.PIPELINE_DEFAULT, projectCode = projectCode, resourceCode = pipelineId, permission = AuthPermission.EXECUTE )

十、常见问题

Q: 如何判断用户是否是项目成员? A: 调用 RbacPermissionService.validateUserProjectPermission() 或检查用户是否在任意项目用户组中。

Q: 如何给用户授权? A: 将用户添加到对应的用户组 RbacPermissionResourceMemberService.addGroupMember() 。

Q: OAuth2 支持哪些授权模式? A: 支持授权码模式(Authorization Code)和密码模式(Password)。

Q: 如何处理权限缓存? A: 使用 BkInternalPermissionCache 进行缓存,通过 Redis 存储,支持主动刷新。

版本: 1.0.0 | 更新日期: 2025-12-10

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

design-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

git-commit-specification

No summary provided by upstream source.

Repository SourceNeeds Review
General

database-design

No summary provided by upstream source.

Repository SourceNeeds Review
General

api-interface-design

No summary provided by upstream source.

Repository SourceNeeds Review