Repository navigation
Desktop 启动失败:浏览器会话 cookie 按端口命名但不清理,累积后触发 431 #10634
Aceared0829
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Summary
Desktop 应用在积累足够多的启动次数后无法打开,报
desktop welcome: Web authentication failed。根因是浏览器会话 cookie 按 Host 的 authority(含端口)命名,而 Host 每次启动使用随机端口,Electron/Chromium 的 cookie jar 又只按 host 存储,导致每次启动都新增一个长期有效且无人清理的 cookie。累积到约 71 个时,请求头超过 Node 的 16 KiB 上限,Host 返回 431,外壳将其视为认证失败。Reproduction
Network/Cookies中127.0.0.1下的dsh-auth-*条目数量。desktop welcome: Web authentication failed。每次启动端口不同,无需任何异常操作即可触发,只是需要足够的启动次数。
Current behavior
BrowserAuth在成功交换启动令牌后下发 cookie,名字由 authority 决定(packages/client/connection/src/browser-auth.ts:116):authority 来自请求头(
browser-auth.ts:79),非 TLS 场景取url.host,即127.0.0.1:<随机端口>。cookie 属性由sessionCookie(browser-auth.ts:138)生成:cookieMaxAgeDays默认 30(packages/client/connection/src/index.ts:115)。属性中没有Domain,也没有任何按端口隔离的手段——而 Chromium 的 cookie jar 的 key 是 (host, name, path),端口不参与。于是每个新端口产生的 cookie 都作为一个独立条目在同一 host 下长期保留。实测(本机复现,累积了 71 条):
GET /?token=...响应失败发生在 Node HTTP 层,早于任何 DSH 逻辑,因此 Host 日志中没有任何异常,外壳只能看到认证交换失败。
dsh web单实例重启也会线性累积,只是慢一些;Desktop 每次启动都是新端口,所以累积最快。Expected behavior
浏览器会话 cookie 的数量不应随启动次数增长。可选方向:
dsh-auth-*条目。Max-Age/Expires),或显著缩短有效期,让陈旧条目自然过期。其中第一项改动最小,且能同时覆盖 Desktop 与 Web 的累积问题。
Environment
@deepseek-ai/dsh-desktop0.2.1-rc.2packages/client/connection/src/browser-auth.ts(cookieName、requestAudience、sessionCookie)、packages/client/connection/src/index.ts(cookieMaxAgeDays)Additional context
在 Desktop 外壳侧已有一个兜底修复:
apps/desktop/src/web-document.ts新增discardStaleHostCookies(),在完成认证后清除 jar 中残留的dsh-auth-*,使 jar 只保留本次启动的条目(Aceared0829/deepseek-harness#12)。该修复只覆盖 Desktop 外壳,Web 端和dsh web多实例场景仍会累积,因此根因仍建议在 Connection 层解决。由于本仓库 Issues 已关闭,这份缺陷报告提交到 Discussions,便于维护者查阅与迁移。
All reactions