Appearance
Copilot SDK 按优先级依次尝试:显式传入 token → 环境变量 → 已存储的 OAuth → GitHub CLI。BYOK 模式完全跳过 GitHub 认证,直接用外部 AI 提供商的 API Key。在 CI/CD 环境中,通过环境变量传入 token 是最推荐的方式。
GitHub Copilot SDK 认证配置:GitHub 账号、OAuth、Token 与 BYOK
认证优先级
Copilot SDK 按以下顺序查找认证信息:
- 代码中显式传入的 token
- 环境变量
GITHUB_TOKEN或COPILOT_TOKEN - 已存储的 OAuth token(通过 Copilot CLI 登录保存)
- GitHub CLI(
gh auth)的登录状态
方式一:交互式登录(最简单,适合本地开发)
依赖用户已用 gh copilot 或 gh auth login 登录的状态:
typescript
import { createSession } from '@github/copilot-sdk'
// SDK 自动使用 CLI 的登录状态,无需任何配置
const session = await createSession()适合本地开发和测试,不适合部署到服务器。
方式二:GitHub OAuth App(SaaS / 多用户应用)
为每个用户单独获取 OAuth token,用户用自己的 Copilot 配额:
typescript
const session = await createSession({
auth: {
type: 'oauth',
clientId: process.env.GITHUB_CLIENT_ID,
token: userOAuthToken // 从你的 OAuth 流程获取的用户 token
}
})OAuth 流程:
- 创建 GitHub OAuth App,获取 Client ID
- 引导用户访问 GitHub 授权页
- 用户授权后,用授权码换取 access token
- 将 token 传入 SDK
方式三:环境变量 Token(CI/CD / 自动化)
适合自动化场景,无需交互登录:
bash
export GITHUB_TOKEN="your-github-token"
export COPILOT_TOKEN="your-copilot-token" # 如果需要单独的 Copilot tokentypescript
// SDK 自动读取环境变量,无需代码配置
const session = await createSession()GitHub Actions 中可以用 ${{ secrets.GITHUB_TOKEN }} 注入 token:
yaml
- name: 运行 Copilot SDK 任务
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx tsx my-script.ts方式四:BYOK(Bring Your Own Key)
使用外部 AI 提供商,完全绕过 GitHub 认证:
OpenAI:
typescript
const session = await createSession({
auth: {
type: 'openai',
baseUrl: 'https://api.openai.com/v1',
apiKey: process.env.OPENAI_API_KEY,
model: 'gpt-4o'
}
})Anthropic Claude:
typescript
const session = await createSession({
auth: {
type: 'anthropic',
apiKey: process.env.ANTHROPIC_API_KEY,
model: 'claude-sonnet-4-6'
}
})Azure OpenAI:
typescript
const session = await createSession({
auth: {
type: 'azure-openai',
baseUrl: 'https://your-resource.openai.azure.com/',
apiKey: process.env.AZURE_OPENAI_KEY,
model: 'gpt-4o'
}
})Ollama(本地模型,无需 API Key):
typescript
const session = await createSession({
auth: {
type: 'ollama',
baseUrl: 'http://localhost:11434',
model: 'llama3'
}
})注意:BYOK 仅支持静态凭证(API Key),不支持托管身份(Managed Identity)或联邦身份。
禁用自动登录
默认情况下,如果找不到认证信息,SDK 会尝试引导用户交互登录。在自动化脚本中,这会导致挂起。设置 useLoggedInUser: false 禁用自动登录:
typescript
const session = await createSession({
useLoggedInUser: false,
auth: {
type: 'token',
token: process.env.GITHUB_TOKEN
}
})常见问题
Q: BYOK 和 Copilot 认证可以在同一个应用中同时使用吗?
A: 可以。创建两个不同的 Session,一个使用 Copilot 认证,另一个使用 BYOK,根据需求路由请求。
Q: GitHub Actions 中的 GITHUB_TOKEN 能用于 Copilot SDK 吗?
A: 取决于仓库的 Copilot 设置。如果仓库所在组织启用了 GitHub Actions 中使用 Copilot,则可以;否则需要使用个人 token 或 OAuth App token。
Q: 自动化脚本中应该用哪种 token 类型?
A: 对于 GitHub Actions,用 GITHUB_TOKEN 或 Personal Access Token;对于长期运行的服务,用 GitHub App 安装 token(有自动续期机制,比 PAT 更安全)。