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:
- 停掉还在跑错误凭据的客户端。锁定期间继续重试没有任何用处——正确密码此时也被拒,重试只会维持锁定状态。
- 把客户端存储的密码改对(账号改了密码后,把 DAV 客户端里存的旧密码同步更新)。
- 等待 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),仅供参考