[GH-ISSUE #266] [Feature Request] 支持自定义 OAuth 回调地址用于 Cloudflare Tunnel 等反向代理场景 #181

Closed
opened 2026-02-27 07:18:22 +03:00 by kerem · 5 comments
Owner

Originally created by @moonjoke001 on GitHub (Jan 19, 2026).
Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/266

问题描述

当使用 Cloudflare Tunnel 或其他反向代理部署 AIClient-2-API 时,Antigravity 和 Gemini CLI 的 OAuth 授权流程存在问题:

  1. 点击"生成授权"后,Google 返回的回调地址固定为 http://localhost:8086
  2. 由于服务通过 Cloudflare Tunnel 暴露,本地 localhost 地址无法访问
  3. 需要手动复制授权码并访问正确的域名才能完成授权

当前行为

用户点击授权 → Google 授权页面 → 授权成功
→ 重定向到 http://localhost:8086/?code=xxx  ← 无法访问
→ 需要手动将 code 参数复制到正确的域名

期望行为

用户点击授权 → Google 授权页面 → 授权成功
→ 重定向到 https://your-domain.com/callback?code=xxx  ← 自动完成
→ 授权自动完成,无需手动操作

建议的解决方案

configs/config.json 中添加配置项,允许用户自定义 OAuth 回调地址:

{
  "ANTIGRAVITY_OAUTH_REDIRECT_URI": "https://oauth-antigravity.example.com/callback",
  "GEMINI_OAUTH_REDIRECT_URI": "https://oauth-gemini.example.com/callback"
}

修改 src/oauth-handlers.js 中的 handleGoogleOAuth 函数:

async function handleGoogleOAuth(providerKey, currentConfig, options = {}) {
    const config = OAUTH_PROVIDERS[providerKey];
    const port = parseInt(options.port) || config.port;
    
    // 支持自定义回调地址
    let redirectUri;
    if (providerKey === 'gemini-antigravity' && currentConfig.ANTIGRAVITY_OAUTH_REDIRECT_URI) {
        redirectUri = currentConfig.ANTIGRAVITY_OAUTH_REDIRECT_URI;
    } else if (providerKey === 'gemini-cli-oauth' && currentConfig.GEMINI_OAUTH_REDIRECT_URI) {
        redirectUri = currentConfig.GEMINI_OAUTH_REDIRECT_URI;
    } else {
        redirectUri = `http://localhost:${port}`;
    }
    
    // ... 其余代码保持不变
}

使用场景

  • Cloudflare Tunnel 部署
  • Nginx 反向代理
  • 其他需要通过公网域名访问的场景

环境信息

  • AIClient-2-API 版本: 最新版
  • 部署方式: Cloudflare Tunnel
  • OAuth 端口: 8086 (Antigravity), 8085 (Gemini)

补充说明

目前的临时解决方案是手动复制授权码并访问正确的回调地址,但这增加了用户操作复杂度。希望能够通过配置文件实现自动化授权流程。

Originally created by @moonjoke001 on GitHub (Jan 19, 2026). Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/266 ## 问题描述 当使用 Cloudflare Tunnel 或其他反向代理部署 AIClient-2-API 时,Antigravity 和 Gemini CLI 的 OAuth 授权流程存在问题: 1. 点击"生成授权"后,Google 返回的回调地址固定为 `http://localhost:8086` 2. 由于服务通过 Cloudflare Tunnel 暴露,本地 localhost 地址无法访问 3. 需要手动复制授权码并访问正确的域名才能完成授权 ## 当前行为 ``` 用户点击授权 → Google 授权页面 → 授权成功 → 重定向到 http://localhost:8086/?code=xxx ← 无法访问 → 需要手动将 code 参数复制到正确的域名 ``` ## 期望行为 ``` 用户点击授权 → Google 授权页面 → 授权成功 → 重定向到 https://your-domain.com/callback?code=xxx ← 自动完成 → 授权自动完成,无需手动操作 ``` ## 建议的解决方案 在 `configs/config.json` 中添加配置项,允许用户自定义 OAuth 回调地址: ```json { "ANTIGRAVITY_OAUTH_REDIRECT_URI": "https://oauth-antigravity.example.com/callback", "GEMINI_OAUTH_REDIRECT_URI": "https://oauth-gemini.example.com/callback" } ``` 修改 `src/oauth-handlers.js` 中的 `handleGoogleOAuth` 函数: ```javascript async function handleGoogleOAuth(providerKey, currentConfig, options = {}) { const config = OAUTH_PROVIDERS[providerKey]; const port = parseInt(options.port) || config.port; // 支持自定义回调地址 let redirectUri; if (providerKey === 'gemini-antigravity' && currentConfig.ANTIGRAVITY_OAUTH_REDIRECT_URI) { redirectUri = currentConfig.ANTIGRAVITY_OAUTH_REDIRECT_URI; } else if (providerKey === 'gemini-cli-oauth' && currentConfig.GEMINI_OAUTH_REDIRECT_URI) { redirectUri = currentConfig.GEMINI_OAUTH_REDIRECT_URI; } else { redirectUri = `http://localhost:${port}`; } // ... 其余代码保持不变 } ``` ## 使用场景 - Cloudflare Tunnel 部署 - Nginx 反向代理 - 其他需要通过公网域名访问的场景 ## 环境信息 - AIClient-2-API 版本: 最新版 - 部署方式: Cloudflare Tunnel - OAuth 端口: 8086 (Antigravity), 8085 (Gemini) ## 补充说明 目前的临时解决方案是手动复制授权码并访问正确的回调地址,但这增加了用户操作复杂度。希望能够通过配置文件实现自动化授权流程。
kerem closed this issue 2026-02-27 07:18:22 +03:00
Author
Owner

@justlovemaki commented on GitHub (Jan 19, 2026):

Gemini只接受回调地址是localhost

<!-- gh-comment-id:3769154763 --> @justlovemaki commented on GitHub (Jan 19, 2026): Gemini只接受回调地址是localhost
Author
Owner

@moonjoke003-cell commented on GitHub (Jan 19, 2026):

Gemini只接受回调地址是localhost
claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法?

<!-- gh-comment-id:3769180845 --> @moonjoke003-cell commented on GitHub (Jan 19, 2026): > Gemini只接受回调地址是localhost claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法?
Author
Owner

@justlovemaki commented on GitHub (Jan 20, 2026):

Gemini只接受回调地址是localhost
claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法?

你只删了节点,没有删配置,凭证管理里面也要删

<!-- gh-comment-id:3771750796 --> @justlovemaki commented on GitHub (Jan 20, 2026): > > Gemini只接受回调地址是localhost > > claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法? 你只删了节点,没有删配置,凭证管理里面也要删
Author
Owner

@moonjoke001 commented on GitHub (Jan 21, 2026):

Gemini只接受回调地址是localhost
claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法?

你只删了节点,没有删配置,凭证管理里面也要删
节点和凭证能不能关联删除,删凭证太麻烦了,因为名字很长要核对

<!-- gh-comment-id:3776144595 --> @moonjoke001 commented on GitHub (Jan 21, 2026): > > > Gemini只接受回调地址是localhost > > > claude-kiro-oauth 提供商配置页面之前提示节点不健康,全删除了后,更新版本或重启后又出现了,需要反复删除求解决方法? > > 你只删了节点,没有删配置,凭证管理里面也要删 节点和凭证能不能关联删除,删凭证太麻烦了,因为名字很长要核对
Author
Owner

@justlovemaki commented on GitHub (Jan 21, 2026):

不用啊,删了节点,直接一键删除未绑定凭证。就是为了做二次确认和节点恢复,才分开的。

<!-- gh-comment-id:3779253985 --> @justlovemaki commented on GitHub (Jan 21, 2026): 不用啊,删了节点,直接一键删除未绑定凭证。就是为了做二次确认和节点恢复,才分开的。
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AIClient-2-API-justlovemaki#181
No description provided.