为嵌入式/桌面集成提供本地可获取的认证途径 #5853
Replies: 1 comment 1 reply
|
源级核实完成(master 源码确认:
token 落盘(你的方案 1)评估:攻击面论证成立——browser-session 的签名 secret 本就持久化在 credentials store( 但 iframe 场景的关键:SameSite=Strict cookie 在跨站 iframe 里既设不上也发不出——Obsidian 顶层 origin ≠ 127.0.0.1 时,iframe 内 dsh 页面对 127.0.0.1 的请求其 site-for-cookies 是顶层站(跨站)→ Strict cookie 不附带;而 http://127.0.0.1 无法用 因此对 OB 内嵌,可行形状是:② socket 源地址判定 + 显式信任档(方向与既有 trust-fence 家族结论一致——Host 头可被反代伪造,socket 来源才是 loopback 的可信判据;本仓已有 sibling 讨论 #5835 同为此 local-first 启动姿态的摩擦面);③ env 显式关(文档注明自担风险);或 ③b:显式 embedder 模式——每请求携带 launch token( 修复面在 core(web profile 装配 + browser-auth),非插件可挂载层 → upstream-fix 候选;社区侧 today-workaround 有限(顶层窗口交换后 iframe 仍不带 Strict cookie),所以这个值得开成正式设计讨论。若你愿意,可以把 ③b 的具体握手(token 生命周期/刷新/登出)细化成提案,我帮你对照 browser-auth 的 audit 与 fencing 约束走查。 |
Uh oh!
There was an error while loading. Please reload this page.
我是 Obsidian 社区插件 DSH for OB 的作者。该插件把 dsh web 内嵌进 Obsidian 侧边栏,本地 loopback 使用为主。
问题:DSH 0.1.2 起 dsh web 启用一次性 token + 浏览器 cookie 认证。token 只打印在启动输出里,桌面集成通常以隐藏控制台/守护进程方式拉起服务,拿不到这段输出;且认证 cookie 是 SameSite=Strict。我们在 0.1.2-rc.1 实测(隔离部署 + Obsidian 内嵌 iframe 验证):内嵌页面无法完成 token 到 cookie 的跳转链路,这是浏览器内核安全策略,嵌入方无法绕过。结果:内嵌面板在 0.1.2+ 整体不可用。
诉求(任一即可,均不削弱现有安全,也不请求按 Host 头放宽):
token 落盘(推荐):
1.启动时把本次 token 写入 ~/.dsh/web-launch-token(仅当前用户可读,退出清理)。token 本就是仅本机可得的一次性凭据,能读该文件的进程本就能读 .credentials.yaml,不扩大攻击面。
2. --auth 分级:默认保持现状;lan 档请基于 socket 实际来源地址判定回环,不要基于 Host 头(避免 #130 的伪造路径)。
或环境变量显式关闭(本机场景自担风险,文档注明)。
All reactions