Skip to main content

Проверка подлинности

SDK GitHub Copilot поддерживает несколько методов аутентификации для различных сценариев использования. Выберите метод, который лучше всего соответствует вашему сценарию развертывания.

Методы аутентификации

МетодВариант использованияТребуется подписка на Copilot
GitHub Авторизованный пользовательИнтерактивные приложения, в которые пользователи входят через GitHubYes
OAuth GitHub приложениеПриложения, действующие от имени пользователей через OAuthYes
Переменные средыCI/CD, автоматизация, сервер-серверYes
BYOK (bring your own key)Используя собственные API-ключи (Azure AI Foundry, OpenAI и др.)Нет

Пользователь GitHub, вошедший в систему

Это стандартный метод аутентификации при интерактивном запуске Copilot CLI. Пользователи аутентифицируются через поток устройств GitHub OAuth, а SDK использует их сохранённые учетные данные.

Принцип работы.

  1. Пользователь запускает CLI copilot и входит через 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 App

Используйте приложение OAuth GitHub для аутентификации пользователей через ваше приложение и передачи их учетных данных SDK. Это позволяет вашему приложению делать запросы на Copilot API от имени пользователей, которые авторизируют ваше приложение.

Принцип работы.

  1. Пользователь авторизирует ваше приложение OAuth GitHub
  2. Ваше приложение получает пользовательский токен доступа (gho_ или ghu_ префикс)
  3. Передайте токен SDK через gitHubToken опцию

Конфигурация 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
  • SaaS-приложения, построенные поверх Copilot
  • Любое многопользовательское приложение, где нужно делать запросы от имени разных пользователей

Переменные среды

Для автоматизации, 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 позволяет использовать собственные API ключи от поставщиков моделей, таких как Azure AI Foundry, OpenAI или Anthropic. Это полностью обходит аутентификацию GitHub Copilot.

Ключевые преимущества:

  • Не требуется подписка на GitHub Copilot
  • Использование корпоративных моделей
  • Прямое выставление счетов у вашего поставщика модели
  • Поддержка совместимых с Azure AI Foundry, OpenAI, Anthropic и OpenAI конечных точек

Полная информация см. BYOK (bring your own key), включая:

  • Настройка Azure AI Foundry
  • Параметры конфигурации поставщика
  • Ограничения и рекомендации
  • Полные примеры кода

Приоритет аутентификации

Когда доступно несколько методов аутентификации, SDK использует их в следующем порядке приоритета:

  1. Явно gitHubToken - Токен передаётся напрямую конструктору SDK
  2. Ключ - CAPI_HMAC_KEYHMAC или COPILOT_HMAC_KEY переменные среды
  3. Токен прямого API - GITHUB_COPILOT_API_TOKEN с COPILOT_API_URL
  4. Токены - COPILOT_GITHUB_TOKENпеременных средыGH_TOKENGITHUB_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();

Дальнейшие действия