30-auth-module-architecture by TencentBlueKing
Auth 权限认证模块架构指南,涵盖 IAM 集成、RBAC 权限模型、资源权限校验、权限迁移、OAuth 认证。当用户开发权限功能、配置 IAM 资源、实现权限校验或处理认证流程时使用。
Security
2.5K Stars
514 Forks
Updated Jan 9, 2026, 09:52 AM
Why Use This
This skill provides specialized capabilities for TencentBlueKing's codebase.
Use Cases
- Developing new features in the TencentBlueKing repository
- Refactoring existing code to follow TencentBlueKing standards
- Understanding and working with TencentBlueKing's codebase structure
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Skill Stats
SKILL.md 468 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: 30-auth-module-architecture
description: Auth 权限认证模块架构指南,涵盖 IAM 集成、RBAC 权限模型、资源权限校验、权限迁移、OAuth 认证。当用户开发权限功能、配置 IAM 资源、实现权限校验或处理认证流程时使用。
---
# 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 默认用户组类型
```kotlin
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(权限中心),核心依赖:
```kotlin
// 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 回调接口
```kotlin
// 资源回调接口 - IAM 拉取资源信息
@Path("/open/auth/resource/callback")
interface OpenAuthResourceCallBackResource {
fun getResource(...) // 获取资源详情
fun listResource(...) // 列出资源
fun searchResource(...) // 搜索资源
}
```
### 7.3 资源类型定义
```kotlin
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 配置类
```kotlin
// 位置:biz-auth/provider/rbac/config/RbacAuthConfiguration.kt (37KB)
@Configuration
class RbacAuthConfiguration {
// IAM 客户端配置
// 权限服务 Bean 定义
// 缓存配置
}
```
### 8.2 MQ 配置
```kotlin
// 位置:biz-auth/provider/rbac/config/RbacMQConfiguration.kt
// 定义权限相关的消息队列
// - 组创建事件
// - 组修改事件
// - ITSM 回调事件
// - 权限同步事件
```
## 九、开发规范
### 9.1 新增权限操作
1. 在 `T_AUTH_ACTION` 表添加操作定义
2. 在 `AuthPermission` 枚举中添加对应值
3. 在 IAM 系统注册操作
4. 更新 `RbacAuthUtils.buildAction()` 映射
### 9.2 新增资源类型
1. 在 `AuthResourceType` 枚举中添加类型
2. 在 `T_AUTH_RESOURCE_TYPE` 表添加记录
3. 实现 `AuthResourceCallBackResource` 回调接口
4. 在 IAM 系统注册资源类型
### 9.3 权限校验示例
```kotlin
// 服务间调用校验权限
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
Name Size