跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

为用户接入 GitHub OAuth

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

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 登录的桌面应用流程混用。