身份验证方法
| 方法 | 用例 | 需要Copilot订阅 |
|---|---|---|
| GitHub已登录用户 | 用户使用GitHub登录的交互式应用 | 是 |
| OAuth GitHub App | 通过 OAuth 代表用户运行的应用 | 是 |
| 环境变量 | CI/CD、自动化、服务器到服务器 | 是 |
| BYOK (bring your own key) | 使用自己的 API 密钥(Azure AI Foundry、OpenAI 等) | 否 |
GitHub 登录用户
这是以交互方式运行 Copilot CLI 时的默认身份验证方法。 用户通过 GitHub OAuth 设备流进行身份验证,SDK 使用其存储的凭据。
工作原理:
- 用户运行
copilotCLI 并通过 GitHub OAuth 登录 - 凭据安全地存储在系统密钥链中
- SDK 自动使用存储的凭据
SDK 配置:
TypeScript
import { CopilotClient } from "@github/copilot-sdk";
// Default: uses logged-in user credentials
const client = new CopilotClient();
Python
from copilot import CopilotClient
# Default: uses logged-in user credentials
client = CopilotClient()
await client.start()
Go
package main
import copilot "github.com/github/copilot-sdk/go"
func main() {
// Default: uses logged-in user credentials
client := copilot.NewClient(nil)
_ = client
}
import copilot "github.com/github/copilot-sdk/go"
// Default: uses logged-in user credentials
client := copilot.NewClient(nil)
.NET
using GitHub.Copilot;
// Default: uses logged-in user credentials
await using var client = new CopilotClient();
Java
import com.github.copilot.sdk.CopilotClient;
// Default: uses logged-in user credentials
var client = new CopilotClient();
client.start().get();
何时使用:
- 用户直接交互的桌面应用程序
- 开发和测试环境
- 用户可以以交互方式登录的任何方案
OAuth GitHub 应用
使用 OAuth GitHub 应用通过应用程序对用户进行身份验证,并将其凭据传递给 SDK。 这使应用程序能够代表授权应用的用户发出Copilot API 请求。
工作原理:
- 用户已授权您的 OAuth GitHub 应用
- 你的应用接收用户访问令牌(
gho_或ghu_前缀) - 通过
gitHubToken选项将令牌传递给 SDK
SDK 配置:
TypeScript
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
gitHubToken: userAccessToken, // Token from OAuth flow
useLoggedInUser: false, // Don't use stored CLI credentials
});
Python
from copilot import CopilotClient
client = CopilotClient({
"github_token": user_access_token, # Token from OAuth flow
"use_logged_in_user": False, # Don't use stored CLI credentials
})
await client.start()
Go
package main
import copilot "github.com/github/copilot-sdk/go"
func main() {
userAccessToken := "token"
client := copilot.NewClient(&copilot.ClientOptions{
GitHubToken: userAccessToken,
UseLoggedInUser: copilot.Bool(false),
})
_ = client
}
import copilot "github.com/github/copilot-sdk/go"
client := copilot.NewClient(&copilot.ClientOptions{
GithubToken: userAccessToken, // Token from OAuth flow
UseLoggedInUser: copilot.Bool(false), // Don't use stored CLI credentials
})
.NET
using GitHub.Copilot;
var userAccessToken = "token";
await using var client = new CopilotClient(new CopilotClientOptions
{
GitHubToken = userAccessToken,
UseLoggedInUser = false,
});
using GitHub.Copilot;
await using var client = new CopilotClient(new CopilotClientOptions
{
GitHubToken = userAccessToken, // Token from OAuth flow
UseLoggedInUser = false, // Don't use stored CLI credentials
});
Java
import com.github.copilot.sdk.CopilotClient;
import com.github.copilot.sdk.json.*;
var client = new CopilotClient(new CopilotClientOptions()
.setGitHubToken(userAccessToken) // Token from OAuth flow
.setUseLoggedInUser(false) // Don't use stored CLI credentials
);
client.start().get();
支持的令牌类型:
gho_- OAuth 用户访问令牌ghu_- GitHub应用用户访问令牌github_pat_- 细粒度个人访问令牌
不支持:
ghp_- 经典个人访问令牌(已弃用)
何时使用:
- 用户通过GitHub登录的 Web 应用程序
- 基于 Copilot 构建的 SaaS 应用程序
- 需要代表不同用户发出请求的任何多用户应用程序
环境变量
对于自动化、CI/CD 管道和服务器到服务器方案,可以使用环境变量进行身份验证。
支持的环境变量(按优先级顺序):
COPILOT_GITHUB_TOKEN- 建议用于显式使用 Copilot 的场景GH_TOKEN- GitHub CLI 兼容GITHUB_TOKEN- GitHub Actions兼容
工作原理:
- 使用有效令牌设置受支持的环境变量之一
- SDK 会自动检测和使用令牌
SDK 配置:
无需更改代码 - SDK 会自动检测环境变量:
TypeScript
import { CopilotClient } from "@github/copilot-sdk";
// Token is read from environment variable automatically
const client = new CopilotClient();
Python
from copilot import CopilotClient
# Token is read from environment variable automatically
client = CopilotClient()
await client.start()
何时使用:
- CI/CD 管道(GitHub Actions、Jenkins 等)
- 自动测试
- 具有服务帐户的服务器端应用程序
- 在不想使用交互式登录时进行开发
BYOK (自带密钥)
BYOK 允许你从模型提供程序(如 Azure AI Foundry、OpenAI 或 Anthropic)使用自己的 API 密钥。 这会完全绕过GitHub Copilot身份验证。
主要优势:
- 无需GitHub Copilot订阅
- 使用企业模型部署
- 使用模型提供商进行直接计费
- 支持 Azure AI Foundry、OpenAI、Anthropic 和 OpenAI 兼容终结点
有关完整详细信息,请参阅 BYOK (bring your own key),包括:
- Azure AI Foundry 设置
- 提供程序配置选项
- 限制和注意事项
- 完整代码示例
身份验证优先级
当有多个身份验证方法可用时,SDK 会按以下优先级顺序使用这些方法:
- 显式
gitHubToken- 直接传递给 SDK 构造函数的令牌 - HMAC 密钥 -
CAPI_HMAC_KEY或COPILOT_HMAC_KEY环境变量 - 直接 API 令牌 -
GITHUB_COPILOT_API_TOKEN使用COPILOT_API_URL - 环境变量令牌 -
COPILOT_GITHUB_TOKEN``GH_TOKEN→→GITHUB_TOKEN - 已存储的 OAuth 凭据 - 来自之前的
copilotCLI 登录 - GitHub CLI -
gh auth凭据
禁用自动登录
若要防止 SDK 自动使用存储的凭据或 gh CLI 身份验证,请使用 useLoggedInUser: false 以下选项:
TypeScript
const client = new CopilotClient({
useLoggedInUser: false, // Only use explicit tokens
});
Python
from copilot import CopilotClient
client = CopilotClient({
"use_logged_in_user": False,
})
client = CopilotClient({
"use_logged_in_user": False, # Only use explicit tokens
})
Go
package main
import copilot "github.com/github/copilot-sdk/go"
func main() {
client := copilot.NewClient(&copilot.ClientOptions{
UseLoggedInUser: copilot.Bool(false),
})
_ = client
}
client := copilot.NewClient(&copilot.ClientOptions{
UseLoggedInUser: copilot.Bool(false), // Only use explicit tokens
})
.NET
await using var client = new CopilotClient(new CopilotClientOptions
{
UseLoggedInUser = false, // Only use explicit tokens
});
Java
import com.github.copilot.sdk.CopilotClient;
import com.github.copilot.sdk.json.*;
var client = new CopilotClient(new CopilotClientOptions()
.setUseLoggedInUser(false) // Only use explicit tokens
);
client.start().get();
后续步骤
- BYOK (bring your own key) - 了解如何使用自己的 API 密钥
- 构建你的第一个由 Copilot 提供支持的应用 - 生成第一个Copilot驱动的应用
- Using MCP servers with the GitHub Copilot SDK - 连接到外部工具