从 Codex 登录引入 OAuth 和 OIDC,让你能通过 Google, Github 等第三方登录的方式

三葉Leaves Author

定义

OAuth(Open Authorization) 允许你(用户)授权第三方应用访问你在某个服务提供商(如 Google、微信、GitHub 等)那里存储的私人数据或资源,而无需将你的用户名和密码透露给这个第三方应用

OIDC(OpenID Connect)建立在 OAuth 2.0 之上,用来 确认“你是谁”并提供用户身份信息

其实,OIDC 就是在 OAuth 的基础上加了一个名为 ID Token 的 JWT。

通过 OIDC ,已经能拿到用户名、邮箱等基础信息,可以做展示使用。

分析 Codex 登录过程

经典的流程如下:

1
2
3
4
5
6
7
8
9
Browser login

redirect localhost

authorization_code

CLI -> /token endpoint # ‼️在这里拿到真实凭证

access_token + id_token + Refresh Token

![[OAuth 和 OIDC 2026-03-06 17.30.51.excalidraw]]

1. 打开登录网页或者窗口

下载好 Codex,终端运行,然后选择第一种方式:使用自己的账号网页授权登录。

这时,Codex 会自动打开你的浏览器的类似于这个网址:

1
2
3
4
5
6
7
8
9
10
11
https://auth.openai.com/oauth/authorize  
?response_type=code
&client_id=app_EMoamEEZ73f0CkXaXp7hrann
&redirect_uri=http%3A%2F%2Flocalhost%3A1455%2Fauth%2Fcallback
&scope=openid%20profile%20email%20offline_access%20api.connectors.read%20api.connectors.invoke
&code_challenge=...
&code_challenge_method=S256
&id_token_add_organizations=true
&codex_cli_simplified_flow=true
&state=...
&originator=codex_cli_rs

其中关键的信息如下:

redirect_uri=http://localhost:1455/auth/callback

这是最关键的一项:登录完成后,浏览器打开这个地址,这会跳回你本机的 1455 端口,把授权结果交给正在本地等待的 Codex CLI。

事实上,在认证过程中,Codex 会启动一个本地服务器在这个端口,一直等待 callback 回来,如此就能确定你认证成功与否。

response_type=code

这表示它使用的是 Authorization Code Flow:浏览器登录成功后,不会直接把 access token 放在 URL 里,而是先返回一个短期的 code,再由 CLI 用这个 code 去访问对方服务器换 Token 的接口,来获得真正有用的 token。这个设计比直接在前端 URL 里传 token 更安全。

2. 触发回调,拿到 code 或者 id_token

当你在 OpenAI 的网站,使用 Google 或者 AppleID 等方式登录以后,会触发一个到这个地址的回调:

1
2
3
4
5
6
7
http://localhost:1455/success
?id_token=...
&needs_setup=false
&org_id=
&project_id=
&plan_type=team
&platform_url=https%3A%2F%2Fplatform.openai.com

这个回调访问的其实就是 Codex 在你本地临时起的服务器。

这里面会让 Codex 拿到一个关键信息,就是 id_token 。在其他一些经典的 OAuth 实践中,会给一个 code 之类的东西。

3. 用 id_token 或者 code 换内部 token,并安全保存

拿到 id_token 或者 code 以后(codex 这里拿到的是 id_token,但通常流程会用 code),codex 会:

  • 通过某种方式,比如 PKCE(Proof Key for Code Exchange)从 OpenAI 官网拿到 AccessToken, RefreshToken 两样东西

一个典型的 PKCE 流程:

1
2
3
4
5
6
7
8
9
10
11
┌─────────────┐                                    ┌─────────────────┐
│ Client │ ──(A) 发送 code_challenge─────────▶│ Auth Server │
│ (应用) │ │ (授权服务器) │
└─────────────┘ └─────────────────┘
│ │
│ │
│ ◀────────(B) 返回授权码 (Authorization Code)────│
│ │
│ ──(C) 发送 code + code_verifier────────────────▶│
│ │
│ ◀────────(D) 返回访问令牌 (Access Token)─────────│
  • 调用系统底层接口,把这两个东西存入系统密钥库(比如苹果的钥匙串)。如果系统不支持,则走 fallback 方案:写入文件(比如 .codex/auth.json

最终,保存的东西如下(为了演示已经部分打码):

1
2
3
4
5
6
7
8
9
10
11
{
"auth_mode": "chatgpt",
"OPENAI_API_KEY": null,
"tokens": {
"id_token": "ey...BXCg",
"access_token": "ey...6Y",
"refresh_token": "rt_v...6Y",
"account_id": "1fa06...b8e"
},
"last_refresh": "2026-03-06T08:13:05.569991Z"
}

之后,codex 再次发起请求的时候,就会使用这个凭证。

通过这个流程,就已经完整的实现了:

  • codex 无需知道你的密码,也能代替你执行一些操作
  • 支持第三方登录

很多其他的网站,支持 Google , Github 等多种登录方式,其实也是基于 OAuth,流程也和上面大同小异。

不同点在于,由于它是网站,没法在你本地起一个服务器监听 127.0.0.1 上的回调,所以,一般他们在自己的服务器上起:

1
https://example.com/oauth/callback?code=abc123&state=xyz

效果也相同。

  • 标题: 从 Codex 登录引入 OAuth 和 OIDC,让你能通过 Google, Github 等第三方登录的方式
  • 作者: 三葉Leaves
  • 创建于 : 2026-03-06 00:00:00
  • 更新于 : 2026-03-06 18:38:22
  • 链接: https://blog.oksanye.com/9b1cc9b2959d/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论