Skip to content
FunCoding

Search

Search docs, Skills and MCP

为用户接入 GitHub OAuth

由应用完成授权流程,再把用户身份交给 SDK,并维护令牌生命周期。

This page has not been translated into English yet. The original Chinese version is shown below.

OAuth 适合内部工具、SaaS 或其他用户已有 GitHub 账户的应用。每个用户授权后,请求以其 Copilot 身份运行,受其资格、额度和企业策略约束。

注册应用与交换令牌

可在 GitHub Settings → Developer Settings → OAuth Apps 注册应用,填写应用名称、主页和回调 URL,保存 Client ID 并生成 Client Secret。GitHub App 也可提供用户授权令牌,官方对新项目建议考虑其更细粒度权限。

应用自己负责浏览器授权与服务器端 code 交换。官方示例向 https://github.com/login/oauth/access_token POST client_id、client_secret 和 code,使用 JSON 请求和响应。该片段只展示交换步骤,不应当作包含完整状态校验、错误处理与用户会话管理的登录实现。

交给 SDK

function createClientForUser(userToken: string): CopilotClient {
    return new CopilotClient({
        gitHubToken: userToken,
        useLoggedInUser: false,
    });
}

上述片段要求已导入 CopilotClient。不要用服务器自身存储的 CLI 登录作为用户令牌失败后的替代身份。

OAuth 教程展示一用户一 client;共享 runtime 则使用 session 级 token,见多租户配置。仅有不同 client 对象并不自动替代独立进程、存储和工具授权边界。

组织与企业

应用可在授权后核对所需组织成员资格。官方示例调用 /user/orgs 检查组织,但具体权限、可见成员范围与分页仍需按 GitHub API 规则实现,不能只复制简化示例作为完整访问控制。

EMU 用户使用相同的 SDK 用户 token 传递方式;GitHub 在服务端执行适用的企业 IP、SSO 等策略,SDK 配置不会绕过这些规则。

令牌生命周期

应用负责保存、刷新、过期和重新认证。支持 OAuth user token、GitHub App user token 与 fine-grained PAT,不支持 classic PAT。

需要缓存每用户 client 时,令牌刷新后也要更新其后续会话所用身份,不能永远复用首次创建对象中的旧 token。可采用会话令牌轮换让 runtime 按需调用应用刷新逻辑。

无需用户 GitHub 账户的模型访问可使用SDK BYOK,不要与仍要求 GitHub 登录的桌面应用流程混用。