从 Codex 登录引入 OAuth 和 OIDC,让你能通过 Google, Github 等第三方登录的方式
定义
OAuth(Open Authorization) 允许你(用户)授权第三方应用访问你在某个服务提供商(如 Google、微信、GitHub 等)那里存储的私人数据或资源,而无需将你的用户名和密码透露给这个第三方应用。
OIDC(OpenID Connect)建立在 OAuth 2.0 之上,用来 确认“你是谁”并提供用户身份信息。
其实,OIDC 就是在 OAuth 的基础上加了一个名为
ID Token的 JWT。
通过 OIDC ,已经能拿到用户名、邮箱等基础信息,可以做展示使用。
分析 Codex 登录过程
经典的流程如下:
1 | Browser login |
![[OAuth 和 OIDC 2026-03-06 17.30.51.excalidraw]]
1. 打开登录网页或者窗口
下载好 Codex,终端运行,然后选择第一种方式:使用自己的账号网页授权登录。
这时,Codex 会自动打开你的浏览器的类似于这个网址:
1 | https://auth.openai.com/oauth/authorize |
其中关键的信息如下:
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 | http://localhost:1455/success |
这个回调访问的其实就是 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 | ┌─────────────┐ ┌─────────────────┐ |
- 调用系统底层接口,把这两个东西存入系统密钥库(比如苹果的钥匙串)。如果系统不支持,则走 fallback 方案:写入文件(比如
.codex/auth.json)
最终,保存的东西如下(为了演示已经部分打码):
1 | { |
之后,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 进行许可。