Puter 托管的 WebDAV 反复提示凭据失败后被 429 锁住怎么排查?
2026/9/11 1:41:13 网站建设 项目流程

Puter 托管的 WebDAV 反复提示凭据失败后被 429 锁住怎么排查?

【免费下载链接】puter🌐 The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter

通过dav端点挂载 Puter 文件系统的客户端,如果客户端存储的密码已经过期(比如账号改过密码),客户端每次请求都会带着错误凭据重发认证。失败登录会被单独计数,数到上限后整个账号会被dav端点拒绝429,窗口内即使用正确密码也一样进不去,并且还会继续弹出凭据输入框。本文说明这个锁定机制的计数规则、如何确认当前是否处于锁定状态,以及解锁和避免再次被锁的步骤。依据是 限流与配额文档 和 WebDAVController.ts 中的认证逻辑。

WebDAV 的三组限制与锁定规则

Puter 的dav端点每个请求都自行认证(不走会话),所以它的限制按网络维度而不是账号维度计算,所有人共用同一套上限:

  • 全局限速:600 请求/分钟,并发10
  • 失败登录(单独计数,成功登录不占额度):
限制每 15 分钟
同一账号的失败登录次数10
同一地址(IP)的失败登录次数50

任一计数超过上限,dav在窗口滚过之前对所有请求都回429——包括密码正确的那些请求。文档原话是:十次错误尝试会把该账号在dav上锁到窗口结束,"一个存着旧密码还在运行的客户端会把自己锁在外面"。

因此"反复提示凭据 + 429"的典型成因链是:客户端存的密码错了 → 每次重发凭据都计一次失败 → 10 次后账号级(或 50 次后 IP 级)额度耗尽 → 窗口内一切请求(含正确密码)都被 429 → 客户端收到 401/429 后再次弹出凭据框。

两个边界事实需要记住:

  • 锁定只作用于dav。账号在桌面端、API 和puter.auth上完全正常,这不是封号。
  • 认证失败时服务端返回401,并带WWW-Authenticate: Basic realm="WebDAV"头(见 WebDAVController.ts),客户端凭这个头弹出凭据框;而失败额度耗尽后返回的是429

确认是否已被失败登录锁定

curl直接向dav发一个带凭据的请求,看返回的状态码(https://dav.<你的域名>替换为部署实际的 dav 主机地址):

# 正确凭据:期望 207(PROPFIND 的多状态响应),而不是 429 curl -sS -o /dev/null -w "%{http_code}\n" -u "your_username:your_password" \ -X PROPFIND "https://dav.<你的域名>/your_username" \ -H "Depth: 1" # 错误凭据:期望 401 curl -sS -o /dev/null -w "%{http_code}\n" -u "your_username:wrong_password" \ "https://dav.<你的域名>/your_username"

按文档描述区分两种状态:

  • 未锁定:错误凭据得到401(响应体为Invalid credentials),正确凭据得到正常 WebDAV 响应。说明只是密码错了,还没触发失败计数上限。
  • 已锁定:连正确凭据也得到429,响应体为Too many failed authentication attempts(该错误在 WebDAVController.ts 中抛出)。注意服务端在验证前就检查失败额度,锁定期间不会再去比对密码。

另注意:同一 IP 下多个账号共享"每地址 50 次"这组计数,多个挂错密码的客户端会互相加速触发 IP 级锁定。

解锁:停掉重试、修密码、等窗口

文档给出的处理方式只有一条主路径,没有手动清计数的 API:

  1. 停掉还在跑错误凭据的客户端。锁定期间继续重试没有任何用处——正确密码此时也被拒,重试只会维持锁定状态。
  2. 把客户端存储的密码改对(账号改了密码后,把 DAV 客户端里存的旧密码同步更新)。
  3. 等待 15 分钟窗口滚过。窗口完全滚过后,用上面curl命令验证:正确凭据不再返回429,恢复为正常响应,客户端即恢复挂载。

长期方案:用-token挂载,跳过账号级锁定

对于长期运行的挂载,文档明确推荐用用户名-token、API token 作密码的方式挂载:

# -token 挂载:密码位填 API token(替换为账号实际持有的 token) curl -sS -o /dev/null -w "%{http_code}\n" -u "-token:YOUR_API_TOKEN" \ "https://dav.<你的域名>/-token"

文档给出的理由:

  • 该方式完全跳过账号级失败上限(服务端对-token路径不记账号桶,只受每 IP 兜底计数约束,见 WebDAVController.ts 的注释与 限流文档);
  • token 可以从 dashboard 吊销,吊销时无需改账号密码;
  • token 不会被别人"猜你的账号"顺带锁掉。

所以排查流程收敛为三步:先用带凭据的curl区分 401(密码错)和 429(已锁);被锁就停掉错误客户端、修正存储的密码、等 15 分钟窗口滚过并复验;确认不再复发后,把长期挂载改造成-token+ API token 的方式。若只是偶发触发,注意dav之外(桌面端、API)的正常使用不受该锁定影响。

【免费下载链接】puter🌐 The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询