Skip to content

[Feature] 支持 xAI Grok 订阅 OAuth 登录 #9768

Description

@RhoninSeiei

功能描述

希望 AstrBot 支持使用 SuperGrok 或符合资格的 X Premium 订阅,通过 xAI OAuth 登录并调用 Grok 模型,无需配置 XAI_API_KEY

当前 AstrBot v4.27.4 已经为 xAI 提供 openai_responses Provider,并通过 Responses API 调用 Grok,但认证方式仍为 API Key。xAI 已经分别发布 OpenClaw、Hermes Agent 和 OpenCode 的官方接入公告,这些项目可以通过浏览器登录或 OAuth 2.0 Device Authorization Grant 使用 Grok 订阅:

其中设备码方式适用于 SSH、Docker、NAS 和 VPS,无需 localhost 回调。OpenClaw 与 Hermes 的公开实现还包含 access token 自动刷新、refresh token 轮换和 Responses API 调用。

建议在 AstrBot 中增加独立的 xAI OAuth Provider Source,与现有 xAI API Key Provider 明确分开。初步实现范围可以包括:

  1. 通过 xAI OIDC discovery 获取设备授权端点和 token 端点。
  2. 在 Dashboard 中发起设备码登录,展示验证地址和一次性代码,并轮询授权结果。
  3. 在 Provider Source 中统一保存 access token、refresh token 和过期时间,由引用该 Source 的模型实例共享凭据状态。
  4. 在 access token 到期前执行单次刷新,并正确处理 refresh token 轮换和并发请求。
  5. 复用现有 openai_responses Provider 的消息转换、流式输出、工具调用和 token 用量统计能力。
  6. OAuth 认证失败时返回明确错误,避免静默切换到 API Key Provider,从而意外进入按量计费方式。
  7. 对登录成功但推理返回 HTTP 403 的情况,区分订阅 entitlement、额度不足和令牌失效,并给出重新登录或改用 API Key 的提示。

相关 AstrBot 工作:

目前还有一个需要维护者确认的问题:xAI 的官方公告明确列出了 OpenClaw、Hermes Agent 和 OpenCode,但 xAI 公开文档尚未提供通用的第三方 OAuth 客户端注册方法。上述项目使用的 OAuth client metadata 可以从公开源码中看到,但尚不清楚 AstrBot 是否可以使用同一客户端,还是需要向 xAI 申请独立客户端或获得正式授权。

在客户端身份和授权方式得到确认后,愿意提交 PR 实现该功能。公开 PR 将采用独立的 xAI OAuth 实现,不依赖其他私有 Provider 代码。

使用场景

  1. AstrBot 部署在 Docker、NAS、VPS 或远程 Linux 主机上时,可以在任意浏览器中输入设备码完成登录,无需配置回调端口或 SSH 端口转发。
  2. 已经订阅 SuperGrok 或符合资格的 X Premium 服务时,可以使用订阅身份调用 Grok,而无需另行购买并管理 xAI API Key。
  3. 多个 Grok 模型引用同一个 xAI OAuth Source 时,可以共享最新凭据,避免多个 Provider 实例分别刷新同一个 refresh token。
  4. OAuth 权限、订阅额度或刷新令牌失效时,Dashboard 和运行日志可以显示明确原因,并保持 API Key 与订阅 OAuth 的计费方式相互独立。

检查清单

  • 我已在 Issue 列表中搜索过相关功能,确认该功能想法从未被提出过。
  • 我建议的功能与 AstrBot 本体相关,而非在建议某一插件的功能。
  • 我已阅读并同意本项目的贡献者行为准则
  • (可选)我愿意提交 PR 以帮助实现该功能。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions