Skip to content

认证接口

认证端点位于 src/services/webServer.jssetupRoutes() 中,与内部路由属于同一 this.router。JWT 由 jsonwebtoken 以 HS256 签发,签发参数固定为 issuer: 'chatai-panel'audience: 'chatai-client',有效期 30 天。 Cookie 名为 auth_tokenhttpOnly: truesameSite: 'lax'secure 取决于 req.securex-forwarded-protoNODE_ENV === 'production'path 为挂载路径。

支持的认证方式

方式说明说明补充
Cookie Tokenauth_token Cookie30 天,浏览器会话保持
Bearer JWTAuthorization: Bearer {token}30 天
URL Token?token={token} 查询参数authMiddleware 亦接受
客户端指纹x-client-fingerprint 请求头登录后绑定,未绑定无需校验
内部令牌x-chatai-internal-tokenDELETE /api/system/release_port 放行

认证中间件 authMiddleware:从 Authorization 头(Bearer)、auth_token Cookie、 token 查询参数三处取 token,校验 JWT 签名后检查客户端指纹;失败时 401。 注意:JWT 载荷不含 userId / isAdmin 字段,仅 { authenticated: true, loginTime, jti } + iss/aud。这与旧文档不同。

获取一次性登录 Token

http
GET /api/auth/token/generate

无需认证,但受限流保护(60 秒内最多 3 次)。

生成 5 分钟有效的临时登录 Token,输出到 Yunzai 控制台日志。

响应

json
{
  "code": 0,
  "data": {
    "success": true,
    "message": "Token 已输出到 Yunzai 控制台",
    "expiresIn": "5分钟"
  },
  "message": "ok"
}

临时 Token 登录

http
GET /login/token?token={token}

校验成功后签发 30 天 JWT 并写入 auth_token Cookie,302 重定向到 {mountPath}/token 缺失时重定向 {mountPath}/login/;无效时重定向 {mountPath}/login/?error=invalid_token

Token 登录(POST)

http
POST /api/auth/login

请求体

参数类型说明
token / passwordstring临时登录 Token(二选一)
fingerprintstring客户端指纹;亦可放在 x-client-fingerprint

Token 无效返回 401Token 无效或已过期)。

响应

json
{
  "code": 0,
  "data": { "token": "<jwt>", "expiresIn": 2592000 },
  "message": "ok"
}

同时写入 auth_token Cookie。

验证临时 Token

http
GET  /api/auth/verify-token?token={token}
POST /api/auth/verify-token

POST 体为 { "token": "..." };支持 x-client-fingerprint 头绑定。

  • 成功:data{ token: '<jwt>', expiresIn: 2592000 }(签发 30 天 JWT)
  • 无 token:400Token is required
  • 无效/过期:401Invalid or expired token

认证状态

http
GET /api/auth/status
GET /api/state

两个端点行为一致:认证通过则返回 data{ authenticated: true }

永久 Token 管理

http
POST   /api/auth/token/permanent
DELETE /api/auth/token/permanent
GET    /api/auth/token/status
  • POST 生成/复用永久 Token(存于 web.permanentAuthToken),请求体 { "forceNew": true } 强制换新;响应 data{ token, isNew }
  • DELETE 撤销:置空 web.permanentAuthToken,响应 { success: true, message: 'Token已撤销' }
  • GET 返回 { hasPermanentToken: boolean }

群管理登录(独立认证体系)

群管理面板的登录与上述 JWT 无关,见群组接口

http
POST /api/group-admin/login
GET  /api/group-admin/verify

错误响应

场景HTTPmessage
无 token401No token provided
JWT 过期401Token expired
JWT 无效401Invalid token
指纹不匹配401Invalid client fingerprint
其他校验失败401Authentication failed

基于 MIT 许可发布