Skip to content

feat(oauth): 双区域登录入池(intl/cn)——bigmodel.cn 国内版授权与业务域分域 - #3

Closed
jk-uzi wants to merge 1 commit into
dengyie:mainfrom
jk-uzi:feat/oauth-realms
Closed

jk-uzi wants to merge 1 commit into
dengyie:mainfrom
jk-uzi:feat/oauth-realms

Conversation

@jk-uzi

@jk-uzi jk-uzi commented Oct 4, 2026

Copy link
Copy Markdown

概述

为账号池引入**双区域(realm)**支持:intl(国际版 z.ai)与 cn(国内版 bigmodel.cn),对齐官方客户端 3.14.x 实证行为(codeapi providers/zcode/realms.py)。

动机

此前 bigmodel 通道只能手动粘贴 API Key,无法走 OAuth 免密登录;且国内版 OAuth 轮询返回的业务 token 结构与国际版不同(data.bigmodel.access_token 本身即业务 token,免二次换取),统一按 intl 流程处理会在 z/login 换取环节失败。

改动要点

  • OAuth flow 分域(app/oauth.py):init provider 参数、业务 token 块名(intl=data.zai / cn=data.bigmodel)、兑换链业务域(intl=api.z.ai / cn=bigmodel.cn)均随 realm 走;cn 区域免 z/login 二次换取
  • Account 模型(app/models.py):新增 realm 字段并随导入/导出持久化;区域缺省自动归区(bigmodel→cn,其余→intl);bigmodel 通道误贴 JWT 自动归位 zai/cn
  • 网关回退域随区域(app/agent.py):cn 账号的回退 API Key 走 open.bigmodel.cn;Plan 通道(messages/billing/claim)两端点同域,不分
  • 后台 API + 前端:新增账号/授权登录支持区域选择,账号池展示区域,国内版授权引导

测试

  • 新增 tests/unit/test_models_realm.py(归区/持久化)、tests/integration/test_oauth_login.py cn 区域全流程用例(Mock 上游扩展 oauth_poll_realm 场景)
  • 全量 pytest 通过(341 例);ruff check app tests、mypy app/constants.py 干净(与 CI 一致)

- OAuth flow 按 realm 分域:intl=z.ai(data.zai 会话凭证需 z/login 换业务 token)、
  cn=bigmodel.cn(data.bigmodel 即业务 token,免二次换取);init provider 随区域
- Account 增加 realm 字段并随导出/导入持久化;bigmodel 通道 JWT 凭证自动归位 zai/cn
- 回退 API Key 业务域随区域(cn → open.bigmodel.cn),Plan 通道两端点同域不分
- 后台新增/授权登录支持区域选择;前端账号池展示区域与国内版授权引导
- Mock 上游支持 oauth_poll_realm 场景;新增 realm 单测与 cn 全流程集成测试
@jk-uzi jk-uzi closed this Oct 4, 2026
@jk-uzi
jk-uzi deleted the feat/oauth-realms branch October 4, 2026 04:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant