dashboard 统计接口无法通过 Open API(open token)访问,返回 "jwt malformed"
Qinglong version
2.21.0-16
Steps to reproduce
问题描述 青龙的 dashboard 统计接口(/api/dashboard/overview 等)无法通过开放平台(Open API)的 token 访问。使用 Open API 应用 token 请求时返回:
复制 {"code": 401, "message": "jwt malformed"} 期望行为 AppScope 中已定义 'dashboard' 这个 scope(见 back/data/open.ts),说明开放平台本应支持 dashboard 统计接口。期望使用具备 dashboard scope 的 Open API token 可以访问 /open/dashboard/* 系列接口,获取:
/dashboard/overview — 今日任务统计(todayRuns / todaySuccess / todayFail / successRate / avgTime) /dashboard/trend — 多日趋势 /dashboard/runtime — 运行中任务 /dashboard/top-count、/dashboard/top-time 复现步骤 青龙开启两步验证(2FA) 系统设置 → 应用(开放平台)→ 新建应用,勾选 dashboard 等 scope 换取 Open API token:`GET /open/auth/token?client_id=xxx&client_secret=*** code:200 和有效 token) 用该 token 请求:GET /open/dashboard/overview,Authorization: Bearer <open_token> 实际返回:{"code": 401, "message": "jwt malformed"} 原因分析(初步) /open/* 会通过 rewrite('/open/', '/api/$1')(back/loaders/express.ts)改写为 /api/。dashboard 路由挂在 /api/dashboard 下,请求经过认证中间件时,expressjwt 会用 JWT secret 解析该 token。Open API token 是随机 UUID(back/services/open.ts 的 authToken),并非签名 JWT,于是被判定为 jwt malformed。
即:Open API token 无法通过 /api/* 前缀下路由的 expressjwt 校验,导致 dashboard 这类仅在 /api/* 下实现的接口,open token 无法访问。而日志/脚本等已实现 /open/* 独立路由的接口不受影响。
What is expected?
为 dashboard 统计接口提供开放平台(Open API)访问能力,例如:
为 /dashboard/* 增加 open token 校验分支,或 提供 /open/dashboard/overview 等独立路由并复用统计逻辑,或 让 expressjwt 识别 open token 并在 scope 允许时放行 dashboard 路径
What is actually happening?
环境 Qinglong 版本:2.21.0-16 部署方式:Docker
System Info
Any additional comments?
No response
Source: whyour/qinglong