Skip to content

[Feature]: Add device code authentication for ACP Codex #706

Description

@akazwz

Feature Description

ACP Codex 目前使用 browser OAuth 进行 ChatGPT 登录。这个流程依赖 Codex 的 local loopback callback,默认回调地址是:

http://localhost:1455/auth/callback

这个流程要求用户打开 OpenAI 授权链接的浏览器,能够访问到运行 Memoh / ACP Codex 环境里的 localhost:1455。在本机运行、本机 Docker 正确映射端口,或配置 SSH port forwarding 的情况下,这个流程可以工作。

但在 remote、headless、hosted,或未正确暴露 loopback callback 的 container/devcontainer 等环境下,浏览器往往无法访问运行 Memoh / ACP Codex 环境里的 localhost:1455。此时 localhost:1455 指向的是浏览器所在环境,而不是 Memoh / ACP Codex 所在环境,导致 OAuth callback 无法到达,登录无法完成。

Codex 官方针对 remote/headless 场景提供了 device code authentication。ACP Codex 支持该流程后,用户无需暴露或转发 localhost:1455 也能完成登录。

Motivation

当前 browser OAuth flow 的核心限制是 local loopback callback。问题不在于 Memoh 和 Codex 是否运行在同一个容器或同一台机器上,而在于用户浏览器是否能够访问到 ACP Codex 等待 OAuth callback 的 localhost:1455

Device code authentication 可以避开这个限制:后端请求一次性 code,用户在浏览器中输入 code,后端再轮询授权结果。整个过程不依赖 local callback server,也不需要公网 redirect URI。

Proposed Solution

  • 增加 ACP Codex device code 登录入口;
  • 后端返回 verification URL、user code、过期时间和轮询间隔;
  • 前端展示 verification URL 和 user code,并轮询登录状态;
  • 后端轮询 Codex/OpenAI device auth 授权结果;
  • 成功后复用现有逻辑写入 .codex/config.toml.codex/auth.json
  • 保留现有 browser OAuth flow,继续支持 local callback 可用的环境。

Metadata

Metadata

Assignees

No one assigned

    Labels

    featNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions