Skip to content

API 调用凭据

本文档说明 W7Panel API 调用中常见 token、签名和微应用凭据的来源、请求格式、响应字段和使用边界。开发新接口时,应先明确接口需要哪一种凭据,避免把用户 token、ServiceAccount token、微应用 Basic 认证、Console token 和 OIDC token 混用。

整体使用方式

W7Panel 的调用凭据按“谁在调用、调用什么资源”来选择。默认规则是:前端或普通业务调用使用面板用户 token;容器文件操作使用 webdavToken;后端访问 Kubernetes 使用 ServiceAccount 或 LOCAL_MOCK 注入的 kubeconfig token;微应用和第三方系统按各自协议使用独立凭据。

基本流程

  1. 登录面板,调用 /panel-api/v1/login 获取 tokenrefreshToken
  2. 普通面板 API 请求统一携带 Authorization: Bearer {token}
  3. token 过期后,使用 /panel-api/v1/auth/refresh-token2refreshToken 换取新 token。
  4. 进入容器文件、WebDAV、压缩、权限修改等场景时,先从容器信息接口获取 webdavToken,再用 Authorization: Bearer {webdavToken} 调用文件类接口。
  5. 微应用内调用面板 API 时优先使用 Wujie props 或 micro-app data 传入的 paneltoken;调用微应用自身后端时使用该微应用自己的 Basic 认证或业务 token。
  6. OIDC Client 按标准 OAuth/OIDC 流程获取 access_token,只用于 OIDC /userinfo 等协议接口,不等同于面板用户 token。

场景选择

场景使用凭据获取方式传递方式
登录、初始化用户、刷新 token无用户 token 或 refresh token登录接口返回 refreshTokenform refreshToken
普通面板业务 API用户 token/panel-api/v1/login 或刷新接口Authorization: Bearer {user-token}
K8s 代理和面板聚合接口用户 token前端登录态或微应用 paneltokenAuthorization: Bearer {user-token}
容器文件、WebDAV、压缩、权限修改webdavToken容器 PID/文件入口相关接口返回Authorization: Bearer {webdavToken}
后端服务访问 KubernetesServiceAccount tokenPod 内自动挂载后端内部使用,不暴露给前端
LOCAL_MOCK=true 开发测试kubeconfig tokenKUBECONFIG 或默认 kubeconfig 路径中间件注入 k8s_token
Console 签名登录ConsoleSignatureConsole 请求签名签名请求头/参数
Console OAuth 登录/绑定Console OAuth code/auth/console/oauth 跳转后回调query/form code
微应用自身后端微应用 Basic 认证MicroApp/ZPK 配置Authorization: Basic ...
OIDC 第三方 ClientOIDC access token/panel-api/v1/oidc/tokenAuthorization: Bearer {oidc-token}

使用边界

  • user-token 是面板业务默认凭据,适用于绝大多数 /panel-api/v1/*/k8s-proxy/* 调用。
  • refreshToken 只用于刷新登录态,不用于普通业务 API。
  • webdavToken 只用于目标容器文件系统相关操作,不应拿来调用普通面板业务 API。
  • ServiceAccount token 和 kubeconfig token 只应在后端内部或 LOCAL_MOCK 开发测试中使用,不应返回给前端。
  • w7PanelToken 是 Console 第三方 CD token,不等同于 paneltoken
  • OIDC access_token 只服务于 OIDC 协议,不保证能调用面板业务 API。
  • 不要在 URL、日志、响应体、localStorage 调试输出中暴露完整 token、密码、密钥或 OIDC code。

通用说明

鉴权

多数面板业务 API 默认使用 Bearer token:

http
Authorization: Bearer <user-token>

后端 helper.GetToken() 当前按以下优先级取 token:

优先级位置示例说明
1query api-token?api-token=xxx兼容入口,不建议新接口使用
2header x-w7panel-tokenx-w7panel-token: xxx兼容入口
3header AuthorizationXAuthorizationX: Bearer xxx兼容入口
4header AuthorizationAuthorization: Bearer xxx标准入口,优先用于新增接口

响应格式

当前项目接口存在两类成功响应:

形态示例说明
直接业务对象{"token":"...","expire":1710000000}JsonResponseWithoutError 返回,登录、用户信息、Console 信息等接口常用
字符串成功"success"JsonSuccessResponse 返回,注册、绑定、导入证书等操作类接口常用

新增文档时应按实际 controller 返回形态描述,不要默认包一层 data

缺少 token 或 TokenReview 校验失败时,middleware.Auth 返回:

json
{
  "code": 401,
  "msg": "请登录"
}

TokenReview 失败时 msg 后会拼接具体错误信息。

参数位置

登录、刷新 token、注册、密码修改等接口多使用 form 参数;当前用户信息、初始化状态等查询接口通常无 body;Console OAuth 登录/回调常用 query/form;Console proxy 会透传原始 path、query、Header 和 body。具体参数位置以各接口明细表为准。

能力概览

能力说明
登录与刷新用户登录、Console 签名登录和 refresh token 换新 token
当前用户信息查询当前 token 对应用户、角色、集群和权限信息
用户初始化与注册初始化用户、注册用户和初始化状态判断
密码管理重置密码和修改当前用户密码
Console 凭据Console OAuth、绑定、注册、证书、代理和第三方 CD token
LOCAL_MOCK开发测试模式下 kubeconfig token 注入和安全边界
公开接口和微应用凭据公开 noauth 接口说明、Wujie props 中各类 token 边界

凭据类型

凭据来源传递方式适用范围说明
用户 token/panel-api/v1/login/panel-api/v1/auth/refresh-token2、浏览器 w7panel-tokenAuthorization: Bearer {token}面板业务 API、K8s 代理、文件管理、应用管理多数接口的默认凭据
refresh token登录接口返回,浏览器保存为 w7panel-refresh-tokenform refreshToken刷新用户 token只用于刷新登录态,不用于普通业务 API
ServiceAccount tokenPod 内 /var/run/secrets/kubernetes.io/serviceaccount/token后端内部使用生产环境服务访问 Kubernetes API不应暴露给前端
kubeconfig tokenKUBECONFIG 指向的 kubeconfigLOCAL_MOCK 中间件注入 k8s_tokenLOCAL_MOCK=true 开发测试用于本地模式模拟 K8s token
webdavToken/panel-api/v1/pid 返回Authorization: Bearer {webdavToken}WebDAV、压缩、权限修改、文件编辑器用于目标容器文件系统访问,字段来源见 container-files.md
ConsoleSignatureConsole 签名中间件签名请求头/参数/panel-api/v1/auth/login用于控制台签名登录
Console 第三方 CD token/panel-api/v1/auth/console/info微应用 props w7PanelToken微应用、制品库、第三方持续交付不等同于面板用户 token
微应用 Basic 认证MicroApp/ZPK 配置中的 username/passwordAuthorization: Basic ...微应用自身后端不用于面板 API
OIDC access token/panel-api/v1/oidc/tokenAuthorization: Bearer {oidc-token}OIDC /userinfo只能按 OIDC 协议获取用户信息

前端 token 注入

前端 axios 拦截器会自动从 src/utils/auth.ts 读取 token 并注入:

http
Authorization: Bearer <getToken()>

getToken() 读取优先级:

优先级来源字段
1Wujie propswindow.$wujie.props.paneltoken
2micro-app datawindow.microApp.getData().token
3localStoragew7panel-tokeniframe-w7panel-token

getRefreshToken() 读取优先级:

优先级来源字段
1Wujie propswindow.$wujie.props.refreshToken
2localStoragew7panel-refresh-tokeniframe-w7panel-refresh-token

请求配置中的 customToken 会覆盖默认 Authorization,适用于文件编辑器、容器文件等需要使用 webdavToken 的场景。

登录与刷新

POST /panel-api/v1/login

功能:使用用户名密码登录面板,返回用户 token 和 refresh token。

认证:无需 Bearer token。

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
usernameformstring用户名,对应 K8s ServiceAccount 名称
passwordformstring密码
pointform条件必填string验证码坐标,captcha.enabled=true 时必填
keyform条件必填string验证码 key,captcha.enabled=true 时必填

请求示例:

bash
curl -X POST 'http://localhost:8080/panel-api/v1/login' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'username=admin' \
  --data-urlencode 'password=123456'

响应参数:

字段类型说明
tokenstring用户 token,后续请求放入 Authorization: Bearer
expireint64token 过期时间,Unix 秒
refreshTokenstringrefresh token,用于刷新登录态
isClusterUserbool是否集群用户
isK3kUserbool兼容字段,是否 K3k 用户

响应示例:

json
{
  "token": "eyJhbGciOi...",
  "expire": 1710000000,
  "isK3kUser": false,
  "isClusterUser": false,
  "refreshToken": "refresh-token-value"
}

POST /panel-api/v1/auth/login

功能:Console 签名登录入口,登录参数与 /panel-api/v1/login 相同。

认证:需要通过 ConsoleSignature 中间件。

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
usernameformstring用户名
passwordformstring密码
pointformstring当前入口不校验验证码
keyformstring当前入口不校验验证码

响应参数:同 /panel-api/v1/login

POST /panel-api/v1/auth/refresh-token2

功能:使用 refresh token 换取新的用户 token。

认证:无需旧用户 token,但请求必须携带有效 refresh token。

请求类型:后端当前绑定 application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
refreshTokenformstring登录接口返回的 refresh token

请求示例:

bash
curl -X POST 'http://localhost:8080/panel-api/v1/auth/refresh-token2' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'refreshToken=refresh-token-value'

响应参数:

字段类型说明
tokenstring新用户 token
expireint64新 token 过期时间,Unix 秒
refreshTokenstring新 refresh token
isK3kUserbool兼容字段
isClusterUserbool是否集群用户,视登录路径返回

实现注意:当前前端拦截器 src/api/interceptor.ts 在 401 后向该接口发送 JSON { "token": getRefreshToken() },但后端 RefreshToken2 实际绑定的是 form 字段 refreshToken。调整刷新逻辑时必须同步前后端,避免刷新登录态失效。

当前用户信息

GET /panel-api/v1/auth/userinfo

功能:返回当前 token 对应的 K3k 用户、角色、集群和功能权限信息。

认证:Authorization: Bearer {user-token}

请求参数:无。

请求示例:

bash
curl 'http://localhost:8080/panel-api/v1/auth/userinfo' \
  -H 'Authorization: Bearer <user-token>'

响应参数:后端返回 K3kUser.ToArray()map[string]string。常用字段如下:

字段类型说明
w7.cc/usernamestring当前用户名称
w7.cc/rolestring用户角色,如 foundersupernormaltechnician
w7.cc/file-editorstring是否允许文件编辑器,字符串布尔值
w7.cc/web-shellstring是否允许 Web Shell,字符串布尔值
w7.cc/domain-white-liststring域名白名单配置
w7.cc/quota-limitstring配额限制
w7.cc/k3k-namestringK3k 名称
w7.cc/k3k-namespacestringK3k 命名空间
w7.cc/cluster-modestring集群模式
w7.cc/cluster-policystring集群策略
w7.cc/cluster-statusstring集群状态
w7.cc/expire-timestring到期时间,格式 2006-01-02 15:04:05
w7.cc/has-passwordstring是否已设置密码,字符串布尔值
w7.cc/cvm-namestringCVM 名称
w7.cc/cvm-namespacestringCVM 命名空间

响应示例:

json
{
  "w7.cc/username": "admin",
  "w7.cc/role": "founder",
  "w7.cc/file-editor": "true",
  "w7.cc/web-shell": "true",
  "w7.cc/k3k-name": "admin",
  "w7.cc/k3k-namespace": "default"
}

用户初始化与注册

POST /panel-api/v1/auth/register

功能:注册用户。

认证:按路由配置使用,调用前确认当前环境是否开放该入口。

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
usernameformstring用户名
passwordformstring密码
policyNameformstring绑定策略名称

响应示例:

json
"success"

POST /panel-api/v1/auth/init-user

功能:初始化首个用户。

认证:按路由配置使用,通常配合初始化状态接口判断是否允许调用。

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
usernameformstring初始用户名
passwordformstring初始密码

响应示例:

json
"success"

密码管理

POST /panel-api/v1/auth/reset-password

功能:校验指定用户旧密码后重置该用户密码。

认证:Authorization: Bearer {user-token}

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
usernameformstring需要重置密码的用户名
passwordformstring原密码
newPasswordformstring新密码

响应示例:

json
{}

POST /panel-api/v1/auth/reset-password-current

功能:修改当前登录用户密码。当前用户已有密码注解时会校验原密码。

认证:Authorization: Bearer {user-token}

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
passwordformstring原密码;当前账号已有密码注解时需要
newPasswordformstring新密码

响应示例:

json
{}

Console 凭据接口

GET /panel-api/v1/auth/console/oauth

功能:生成 Console OAuth 跳转地址。

认证:无需用户 token。

请求参数:

参数位置必填类型说明
redirect_uriquery/formstringOAuth 回调地址

响应规则:

请求头响应
Accept: application/json返回 {"url":"{redirect-url}"}
其他HTTP 302 跳转到 Console OAuth 地址

JSON 响应示例:

json
{
  "url": "https://console.example.com/oauth/authorize?..."
}

实现注意:当前 controller 在返回 JSON 后没有显式 return,代码仍会继续执行 302 redirect。前端调用该接口时应优先按实际响应验证。

GET /panel-api/v1/auth/console/login

功能:使用 Console OAuth code 登录面板;若 Console 用户尚未绑定面板用户,会尝试注册并绑定。

认证:无需 Bearer token。

请求参数:

参数位置必填类型说明
codequery/formstringConsole OAuth 授权码
policyNamequery/formstring自动注册时使用的策略名称

响应参数:同 /panel-api/v1/login

请求示例:

bash
curl 'http://localhost:8080/panel-api/v1/auth/console/login?code=<oauth-code>&policyName=default'

GET /panel-api/v1/auth/console/bind

功能:把当前面板用户与 Console OAuth 授权结果绑定。

认证:Authorization: Bearer {user-token}

请求参数:

参数位置必填类型说明
codequery/formstringConsole OAuth 授权码

响应:

位置字段类型说明
headeruidstringConsole 用户 ID
body-string"success"

GET /panel-api/v1/auth/console/info

功能:返回面板与 Console 的注册、授权、第三方 CD token 和证书信息。

认证:Authorization: Bearer {user-token}

请求参数:无。

响应参数:

字段类型说明
thirdparty_cd_tokenstringConsole 第三方 CD token
cluster_idstringConsole 侧集群 ID
offline_urlstring离线/私有化 Console 地址
access_tokenstringConsole OAuth access token
expire_timeintaccess_token 过期时间,Unix 秒
api_server_urlstringConsole API 地址
require_oauthbool是否需要发起 OAuth 授权
is_registerbool是否已注册到 Console
userinfoobject/nullConsole 用户信息
license_typestring证书类型,过期时回落为 free
license_idstring证书序列号
license_end_timestring证书到期时间,格式 2006-01-02 15:04:05
license_is_expiredbool证书是否过期
debug_valuestring调试值

响应示例:

json
{
  "thirdparty_cd_token": "cd-token-value",
  "cluster_id": "cluster-001",
  "offline_url": "",
  "access_token": "console-access-token",
  "expire_time": 1710000000,
  "api_server_url": "https://console.example.com",
  "require_oauth": false,
  "is_register": true,
  "userinfo": {
    "user_id": 1,
    "nickname": "admin"
  },
  "license_type": "free",
  "license_id": "0",
  "license_end_time": "2026-06-03 12:00:00",
  "license_is_expired": false,
  "debug_value": ""
}

POST /panel-api/v1/auth/console/register-to-console

功能:把当前面板注册到 Console。

认证:Authorization: Bearer {user-token}

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
offline_urlformstringConsole 地址
api_server_urlformstringConsole API 地址

响应示例:

json
"success"

POST /panel-api/v1/auth/console/import-cert

功能:导入证书内容。

认证:Authorization: Bearer {user-token}

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
certformstring证书内容

响应示例:

json
"success"

POST /panel-api/v1/auth/console/import-cert-console

功能:从 Console 按 licenseId 导入证书。

认证:Authorization: Bearer {user-token}

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
licenseIdformstringConsole license ID

响应示例:

json
"success"

POST /panel-api/v1/auth/console/verify-cert

功能:校验证书状态。

认证:Authorization: Bearer {user-token}

请求参数:无。

响应示例:

json
"success"

POST /panel-api/v1/auth/console/thirdparty-cd-token

功能:预留的第三方 CD token 接口。

当前实现为空,controller 未写入响应体。前端或微应用不要依赖该接口获取 token,应优先使用 /panel-api/v1/auth/console/info 返回的 thirdparty_cd_token

ANY /panel-api/v1/auth/console/proxy/*path

功能:代理到 Console SDK。

认证:middleware.NewAuth("founder"),仅创始人/高权限场景使用。

请求参数:透传原始 method、path、query、body 和 header。

响应参数:透传 Console 返回。

GET /panel-api/v1/auth/console/code/:code

功能:把优惠码请求代理到 Console 第三方 CD SDK。

认证:Authorization: Bearer {user-token}

请求参数:

参数位置必填类型说明
codepathstring优惠码

响应参数:透传 Console 返回。

POST /panel-api/v1/auth/console/register-zpk-site

功能:注册 ZPK 站点,并将返回的 app secret 写入对应应用容器配置。

认证:无需用户 token。Controller 内部通过 releaseNameinstallId 做临时校验。

请求类型:application/x-www-form-urlencoded

请求参数:

参数位置必填类型说明
hostformstring站点域名
siteIdentifieformstring站点标识
installIdformstring安装 ID
appNameformstring应用名称
containerNameformstring容器名称
namespaceformstring应用命名空间
releaseNameformstringRelease 名称

响应参数:当前 Controller 成功后未显式写入 JSON。

LOCAL_MOCK 行为

LOCAL_MOCK=trueLOCAL_MOCK=1 时,middleware.Auth 会绕过 TokenReview,并把 kubeconfig token 注入到请求上下文:

go
ctx.Set("k8s_token", token)

token 读取顺序:

优先级路径
1$KUBECONFIG 环境变量指定文件
2./kubeconfig.yaml
3./config/kubeconfig.yaml
4./w7panel/kubeconfig.yaml
5filepath.Join(filepath.Dir(KO_DATA_PATH), "kubeconfig.yaml")
6固定回退值 local-mock-token

注意事项:

说明
用户身份LOCAL_MOCK 分支只设置 k8s_token,不设置 username
使用范围仅用于本地开发测试,默认部署测试使用 LOCAL_MOCK=true
安全边界生产接口不要依赖 LOCAL_MOCK 绕过真实用户鉴权
文件接口LOCAL_MOCK 只改变 Agent/文件访问路径,不改变前端应携带 token 的约定

公开接口

公开接口使用 /panel-api/v1/noauth/* 前缀,必须只返回业务允许公开的字段。

接口说明
GET /panel-api/v1/noauth/site/beian备案信息
GET /panel-api/v1/noauth/site/beian2备案信息兼容入口
GET /panel-api/v1/noauth/site/k3k-configK3k 公开配置
GET /panel-api/v1/noauth/site/init-user初始化用户相关公开配置
GET /panel-api/v1/noauth/site/lianxi联系信息
GET /panel-api/v1/noauth/site/{name}/configmap允许公开的 ConfigMap 业务字段

禁止公开接口返回完整 K8s Resource 对象、metadata、managedFields、Secret、token 或密码。

微应用常见 props

面板通过 Wujie 向微应用传递的 props 不是统一 token,字段含义不同:

字段类型说明
urlstring面板代理请求微应用后端服务的地址
groupstring应用标识分组;有多个子应用时为主应用标识
useridstring/numberConsole 用户 ID
openidstringConsole openid
nicknamestringConsole 昵称
rolestring面板角色,如 foundersupernormaltechnician
paneltokenstring面板用户 token,可用于请求面板 API
w7PanelTokenstringConsole 第三方 CD token
Authorizationstring微应用自身 Basic 认证
access_tokenstring面板登录用户自身维护的 Console access token,只能获取用户信息
isRegisterbool/string是否已注册 Console
requestUrlstring微应用请求基地址

更详细的微应用事件和 props 说明见 ../frontend/wujie-events.md

开发检查

  • 新增接口时明确是否需要 middleware.Authmiddleware.NewAuth("founder")ConsoleSignature、OIDC 标准处理或公开访问。
  • 不在日志、URL、响应体、前端 localStorage 中输出完整 token、密码、密钥、OIDC code。
  • token 字段不要复用同名但不同含义的变量,尤其是 access_tokenpaneltokenw7PanelTokenwebdavToken
  • 前端新增调用时同步检查 src/api/interceptor.tssrc/utils/auth.ts 和微应用 props 传递逻辑。
  • 修改登录、刷新、鉴权中间件后,同步检查本文档、container-files.md 和前端登录态处理。