Skip to main content

Authentication

GitHub Copilot SDK 支持多种身份验证方法以适应不同的用例。 选择最适合部署方案的方法。

身份验证方法

方法用例需要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 使用其存储的凭据。

工作原理

  1. 用户运行 copilot CLI 并通过 GitHub OAuth 登录
  2. 凭据安全地存储在系统密钥链中
  3. 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 请求。

工作原理

  1. 用户已授权您的 OAuth GitHub 应用
  2. 你的应用接收用户访问令牌(gho_ghu_ 前缀)
  3. 通过 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 管道和服务器到服务器方案,可以使用环境变量进行身份验证。

支持的环境变量(按优先级顺序):

  1. COPILOT_GITHUB_TOKEN - 建议用于显式使用 Copilot 的场景
  2. GH_TOKEN - GitHub CLI 兼容
  3. GITHUB_TOKEN - GitHub Actions兼容

工作原理

  1. 使用有效令牌设置受支持的环境变量之一
  2. 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 会按以下优先级顺序使用这些方法:

  1. 显式 gitHubToken - 直接传递给 SDK 构造函数的令牌
  2. HMAC 密钥 - CAPI_HMAC_KEYCOPILOT_HMAC_KEY 环境变量
  3. 直接 API 令牌 - GITHUB_COPILOT_API_TOKEN 使用 COPILOT_API_URL
  4. 环境变量令牌 - COPILOT_GITHUB_TOKEN``GH_TOKEN →→GITHUB_TOKEN
  5. 已存储的 OAuth 凭据 - 来自之前的 copilot CLI 登录
  6. 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();

后续步骤