### 版本号 3.4.2(官方镜像 `aimodcc/agent2api:3.4.2`,Docker / Linux 服务端形态) ### 哪一家 / 哪个地区版本 讯飞 **AStudio**(`astudio`,国内版)实测复现。 同类机制预计还涉及把登录页/回调服务绑在 loopback 的其它家:CodeArts、CatPaw、Antigravity、Kiro、Accio、Trae OAuth。 ### 同一时间,这一家的官方客户端能正常用吗? 能,官方网页版一切正常,纯网关侧可达性问题。 ### 你做了什么,看到什么 1. 容器部署,`ports` 只映射 `3065:3065`,面板用 `http://192.168.50.47:3065` 远程访问。 2. 账号页 → 添加账号 → AStudio → 「手机号 / 账号密码登录(OAuth)」→ 点「登录并添加」。 3. 弹出新标签页:`http://127.0.0.1:37826/?t=<token>` → 浏览器报 **ERR_CONNECTION_REFUSED**。 ``` 无法访问此网站 127.0.0.1 拒绝了我们的连接请求。 ERR_CONNECTION_REFUSED ``` 定位过程(同一个容器里现场取的): - 容器 `/proc/net/tcp` 的 LISTEN 记录: | 端口 | 本地地址 | 含义 | | --- | --- | --- | | 3065 | `00000000` | 全网卡,浏览器可达 | | 37826 | `0100007F` | **127.0.0.1,仅容器自身可达** | - 在容器内直接访问这个地址是**正常**的: ``` curl -s -i "http://127.0.0.1:37826/?t=<token>" HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 10200 <title>AStudio 登录</title> ← 手机号验证码 / 账号密码 两个 tab,含滑块 ``` 不带 `t` 时返回 `403 登录页凭证不正确`,符合预期。 - 这个页面是**自包含表单**,凭证 POST 给插件自己的 `/api/*?t=`(见页内 `fetch('/api/' + path + '?t=' + TOKEN)`),**不是 302 跳上游登录页** —— 所以「把上游地址拎出来单独打开」这条绕路也不成立,页面必须在浏览器里打开。 一句话:登录页服务绑在**容器的回环地址**上,而浏览器运行在用户机器上,`127.0.0.1` 指的是用户自己的电脑,因此必然连不上。这不是防火墙或代理问题,改 hosts 也没用。 ### 其它补充 **为什么这次特别碍事** - 端口是**每次随机分配**的(这次 37826,下次不同),用户没法自己 `docker -p` 固定映射。 - 容器里没有 `socat` / `nc` / `python3`,NAS 宿主也没有 `socat` / `nsenter`,用户侧做端口中继的成本极高。 **影响面** - 凡「登录页或回调服务绑 loopback」的流程,在 Docker / 远程面板下一律不可用。 - 对照组:OfficeAce、Tabbit 这类**轮询型**(不弹本地页)能正常添加成功 —— 这正好可以区分是「上游问题」还是「本地页可达性问题」。 **与已有 issue 的关系(不是重复)** - **#46**(已关闭)的 web shim 解决的是「**回调粘贴**」,覆盖 Trae / Accio / AutoClaw / 小浣熊 / CodeArts / CatPaw 的回调型。AStudio 这条是「**本地表单页**」而不是回调,没有被覆盖。 - **#205**(已修)是面板「接口地址」显示 127.0.0.1 假值,属同类思路(web 模式该用 `location.origin`),但只修了地址展示。 - **#508** 把短信登录搬进面板,能覆盖「验证码」那一档;但 AStudio 这条还带「账号密码 + 滑块」,搬不进去就不会通。 **建议(改动量从小到大)** - **A(推荐)**:把登录页挂到网关同源,例如 `GET /api/session/login/page/{provider}?t=<token>`,由网关反向代理到插件的本地监听。3065 已经是发布端口,容器零配置,面板可以直接打开或内嵌 iframe,`t` 的校验逻辑原样保留。 - **B**:插件监听 `0.0.0.0` + 面板按 `location.origin` 生成链接。需要固定端口段并让用户映射,改动大、还得改文档。 - **C(临时缓解)**:在这个弹窗里把「粘贴 modelBearerToken (API)」做成显式引导(现在有这个 tab,但没有任何提示说明「容器部署请用这个」)。 **我现在的绕过方式** 用弹窗里的「粘贴 modelBearerToken (API)」tab 加账号,可用;但容器部署下「滑块 / 账号密码登录」实际上等于不存在。
Activity