# VBase API 文档 ## 概述 VBase 是一个多租户身份认证与访问管理(IAM)系统,支持用户管理、组织管理、RBAC权限控制和OAuth2.0服务。 **基础信息** - 基础URL: `https://api.example.com` - 请求格式: `application/json` - 响应格式: `application/json` - 认证方式: Bearer Token (JWT) **通用响应格式** ```json { "code": 200, "message": "success", "data": {} } ``` **错误响应** ```json { "code": 400, "message": "error message", "data": null } ``` --- ## 认证相关 ### 用户登录 **POST** `/auth/login` 用户登录获取访问令牌。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | username | string | 是 | 用户名/邮箱/手机号 | | password | string | 是 | 密码 | | remember | bool | 否 | 记住登录 | **响应示例** ```json { "code": 200, "data": { "access_token": "eyJhbGciOiJIUzI1NiIs...", "refresh_token": "eyJhbGciOiJIUzI1NiIs...", "token_type": "Bearer", "expires_in": 3600, "user": { "id": "user-id", "username": "admin", "nickname": "管理员", "email": "admin@example.com", "avatar": "https://..." } } } ``` --- ### 用户注册 **POST** `/auth/register` 注册新用户。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | username | string | 是 | 用户名(2-50字符) | | password | string | 是 | 密码(至少8位) | | email | string | 否 | 邮箱 | | phone | string | 否 | 手机号 | | nickname | string | 否 | 昵称 | --- ### 刷新Token **POST** `/auth/refresh` 使用刷新令牌获取新的访问令牌。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | refresh_token | string | 是 | 刷新令牌 | --- ### 用户登出 **POST** `/auth/logout` 用户登出,使当前Token失效。 **请求头** - Authorization: Bearer {access_token} --- ### 支持的第三方登录提供商 **GET** `/auth/providers` 获取系统支持的第三方登录提供商列表。 **响应示例** ```json { "code": 200, "data": [ { "name": "google", "display_name": "Google", "icon": "google", "enabled": true }, { "name": "github", "display_name": "GitHub", "icon": "github", "enabled": true } ] } ``` --- ### 第三方登录授权 **GET** `/auth/authorize/thirdparty` 获取第三方登录授权URL。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | provider | string | 是 | 提供商: google/github/wechat | | redirect | string | 否 | 登录成功后重定向地址 | | bind_mode | bool | 否 | 是否为绑定模式 | **响应示例** ```json { "code": 200, "data": { "auth_url": "https://github.com/login/oauth/authorize?...", "state": "random-state-string" } } ``` --- ### 第三方登录回调 **GET** `/auth/callback/{provider}` 处理第三方登录回调。 **路径参数** - provider: 提供商名称 **查询参数** - code: 授权码 - state: 状态值 **响应示例(已绑定)** ```json { "code": 200, "data": { "need_bind": false, "access_token": "eyJhbGciOiJIUzI1NiIs...", "refresh_token": "eyJhbGciOiJIUzI1NiIs...", "token_type": "Bearer", "expires_in": 3600, "user": {...} } } ``` **响应示例(未绑定)** ```json { "code": 200, "data": { "need_bind": true, "provider": "github", "provider_id": "12345", "auth_url": "/auth/bind?token=xxx" } } ``` --- ### 绑定第三方账号 **POST** `/auth/bind` 将第三方账号绑定到已有账号。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | temp_token | string | 是 | 临时绑定令牌 | | username | string | 是 | 用户名/邮箱/手机号 | | password | string | 是 | 密码 | --- ## 当前用户 ### 获取当前用户信息 **GET** `/me` 获取当前登录用户的信息。 **请求头** - Authorization: Bearer {access_token} **响应示例** ```json { "code": 200, "data": { "id": "user-id", "username": "admin", "nickname": "管理员", "email": "admin@example.com", "avatar": "https://...", "status": 1, "email_verified": true } } ``` --- ### 更新当前用户信息 **PATCH** `/me` 更新当前用户的基本信息。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | nickname | string | 否 | 昵称 | | avatar | string | 否 | 头像URL | | email | string | 否 | 邮箱 | --- ### 修改密码 **POST** `/me/change-password` 修改当前用户密码。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | old_password | string | 是 | 旧密码 | | new_password | string | 是 | 新密码(至少8位) | --- ### 获取第三方绑定列表 **GET** `/me/bindings` 获取当前用户绑定的第三方账号列表。 **响应示例** ```json { "code": 200, "data": [ { "provider": "github", "provider_name": "GitHub User", "avatar": "https://...", "email": "user@example.com", "created_at": "2024-01-01 10:00:00" } ] } ``` --- ### 解绑第三方账号 **DELETE** `/me/bindings/{provider}` 解除指定提供商的账号绑定。 **路径参数** - provider: 提供商名称 (google/github/wechat) --- ## 用户管理 ### 用户列表 **GET** `/users` 获取用户列表(需要权限)。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | page | int | 否 | 页码,默认1 | | page_size | int | 否 | 每页数量,默认10 | | keyword | string | 否 | 搜索关键词 | | status | int | 否 | 状态筛选 | **响应示例** ```json { "code": 200, "data": { "items": [...], "total": 100, "page": 1, "page_size": 10, "total_pages": 10 } } ``` --- ### 创建用户 **POST** `/users` 创建新用户(需要权限)。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | username | string | 是 | 用户名 | | password | string | 是 | 密码 | | nickname | string | 否 | 昵称 | | email | string | 否 | 邮箱 | | phone | string | 否 | 手机号 | | status | int | 否 | 状态 | --- ### 获取用户详情 **GET** `/users/{user_id}` 获取指定用户的详细信息。 **路径参数** - user_id: 用户ID --- ### 更新用户 **PATCH** `/users/{user_id}` 更新指定用户的信息。 **路径参数** - user_id: 用户ID **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | nickname | string | 否 | 昵称 | | avatar | string | 否 | 头像 | | email | string | 否 | 邮箱 | | phone | string | 否 | 手机号 | | status | int | 否 | 状态 | --- ### 删除用户 **DELETE** `/users/{user_id}` 删除指定用户(软删除)。 --- ### 更新用户状态 **PATCH** `/users/{user_id}/status` 更新用户状态。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | status | int | 是 | 0:禁用 1:正常 2:未激活 | --- ## 组织管理 ### 组织列表 **GET** `/orgs` 获取当前用户的组织列表。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | page | int | 否 | 页码 | | page_size | int | 否 | 每页数量 | | keyword | string | 否 | 搜索关键词 | **响应示例** ```json { "code": 200, "data": { "items": [ { "id": "org-id", "name": "技术部", "code": "tech", "owner_id": "user-id", "path": "/tech", "level": 0, "status": 1, "my_roles": ["admin"], "my_status": 1 } ], "total": 10 } } ``` --- ### 创建组织 **POST** `/orgs` 创建新组织。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | name | string | 是 | 组织名称 | | code | string | 是 | 组织编码(唯一) | | parent_id | string | 否 | 父组织ID | | description | string | 否 | 描述 | | max_members | int | 否 | 最大成员数 | --- ### 获取组织详情 **GET** `/orgs/{org_id}` 获取组织详细信息。 --- ### 更新组织 **PATCH** `/orgs/{org_id}` 更新组织信息(仅所有者)。 --- ### 删除组织 **DELETE** `/orgs/{org_id}` 删除组织(仅所有者,需无子组织)。 --- ### 组织树 **GET** `/orgs/tree` 获取当前用户的组织树结构。 **响应示例** ```json { "code": 200, "data": [ { "id": "org-id", "name": "总公司", "children": [ { "id": "sub-org-id", "name": "技术部" } ] } ] } ``` --- ### 组织成员列表 **GET** `/orgs/{org_id}/members` 获取组织成员列表。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | page | int | 否 | 页码 | | page_size | int | 否 | 每页数量 | | status | int | 否 | 状态筛选 | --- ## OAuth2.0 服务端 ### 授权端点 **GET** `/oauth/authorize` OAuth2.0 授权端点,获取授权码。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | response_type | string | 是 | code/token | | client_id | string | 是 | 客户端ID | | redirect_uri | string | 是 | 回调地址 | | scope | string | 否 | 权限范围 | | state | string | 是 | CSRF防护 | | code_challenge | string | 否 | PKCE挑战码 | | code_challenge_method | string | 否 | S256/plain | --- ### 令牌端点 **POST** `/oauth/token` OAuth2.0 令牌端点,交换授权码获取访问令牌。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | grant_type | string | 是 | authorization_code/refresh_token/client_credentials | | code | string | 条件 | 授权码 | | redirect_uri | string | 条件 | 回调地址 | | client_id | string | 是 | 客户端ID | | client_secret | string | 是 | 客户端密钥 | | refresh_token | string | 条件 | 刷新令牌 | | code_verifier | string | 条件 | PKCE验证器 | --- ### 撤销令牌 **POST** `/oauth/revoke` 撤销访问令牌或刷新令牌。 --- ### 令牌内省 **POST** `/oauth/introspect` 查询令牌信息(RFC 7662)。 --- ### 用户信息 **GET** `/oauth/userinfo` OIDC 用户信息端点。 --- ### OIDC 发现文档 **GET** `/.well-known/openid-configuration` 获取 OIDC 配置信息。 --- ### JWKS **GET** `/oauth/jwks` 获取 JWT 签名公钥。 --- ## OAuth 客户端管理 ### 客户端列表 **GET** `/oauth/clients` 获取 OAuth 客户端列表。 --- ### 创建客户端 **POST** `/oauth/clients` 创建新的 OAuth 客户端。 **请求参数** | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | name | string | 是 | 应用名称 | | description | string | 否 | 描述 | | redirect_uris | []string | 是 | 回调地址列表 | | grant_types | []string | 否 | 授权类型 | | allowed_scopes | []string | 否 | 允许的范围 | **响应示例** ```json { "code": 200, "data": { "id": "client-id", "name": "My App", "client_id": "abc123...", "client_secret": "secret...", "redirect_uris": ["https://app.com/callback"], "grant_types": ["authorization_code", "refresh_token"] } } ``` --- ### 获取客户端详情 **GET** `/oauth/clients/{client_id}` 获取 OAuth 客户端详情。 --- ### 更新客户端 **PATCH** `/oauth/clients/{client_id}` 更新 OAuth 客户端信息。 --- ### 删除客户端 **DELETE** `/oauth/clients/{client_id}` 删除 OAuth 客户端。 --- ### 重新生成密钥 **POST** `/oauth/clients/{client_id}/regenerate-secret` 重新生成客户端密钥。 --- ## 请求头说明 ### 认证头 ``` Authorization: Bearer {access_token} ``` ### 组织上下文 ``` X-Org-ID: {organization_id} ``` 用于指定当前操作的组织上下文。 --- ## 状态码说明 | 状态码 | 说明 | |--------|------| | 200 | 成功 | | 400 | 请求参数错误 | | 401 | 未认证 | | 403 | 无权限 | | 404 | 资源不存在 | | 429 | 请求过于频繁 | | 500 | 服务器内部错误 |