Методы аутентификации
| Метод | Вариант использования | Требуется подписка на Copilot |
|---|---|---|
| GitHub Авторизованный пользователь | Интерактивные приложения, в которые пользователи входят через GitHub | Yes |
| GitHub приложение OAuth | Приложения, действующие от имени пользователей через OAuth | Yes |
| Переменные среды | CI/CD, автоматизация, сервер-сервер | Yes |
| Проверка подлинности между серверами | Автоматизация с учетом организации и прямое выставление счетов организации | Нет подписки пользователя; Требуется политика организации |
| БЁК (принеси свой ключ) | Использование собственных ключей API (Microsoft Foundry, OpenAI и многое другое) | Нет |
Пользователь GitHub, вошедший в систему
Это стандартный метод аутентификации при интерактивном запуске Copilot CLI. Пользователи аутентифицируются через поток устройств GitHub OAuth, а SDK использует их сохранённые учетные данные.
Принцип работы.
- Пользователь запускает CLI
copilotи входит через GitHub OAuth - Учетные данные надёжно хранятся в системном ключе
- SDK автоматически использует сохранённые учетные данные
Конфигурация SDK:
using GitHub.Copilot;
// Default: uses logged-in user credentials
await using CopilotClient client = new();
import copilot "github.com/github/copilot-sdk/go"
// Default: uses logged-in user credentials
client := copilot.NewClient(nil)
import com.github.copilot.CopilotClient;
// Default: uses logged-in user credentials
var client = new CopilotClient();
client.start().get();
from copilot import CopilotClient
# Default: uses logged-in user credentials
client = CopilotClient()
await client.start()
use github_copilot_sdk::{Client, ClientOptions};
// Default: uses logged-in user credentials
let client = Client::start(ClientOptions::default()).await?;
import { CopilotClient } from "@github/copilot-sdk";
// Default: uses logged-in user credentials
const client = new CopilotClient();
Когда использовать:
- Настольные приложения, где пользователи взаимодействуют напрямую
- среды для разработки и тестирования;
- Любой сценарий, когда пользователь может войти интерактивно
GitHub приложение OAuth
Используйте приложение OAuth GitHub для аутентификации пользователей через ваше приложение и передачи их учетных данных SDK. Это позволяет вашему приложению делать запросы на Copilot API от имени пользователей, которые авторизируют ваше приложение.
Принцип работы.
- Пользователь авторизирует ваше приложение OAuth GitHub
- Ваше приложение получает пользовательский токен доступа (
gho_илиghu_префикс) - Передача маркера в пакет SDK через конфигурацию клиента
Конфигурация SDK:
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
});
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
})
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;
var client = new CopilotClient(new CopilotClientOptions()
.setGitHubToken(userAccessToken) // Token from OAuth flow
.setUseLoggedInUser(false) // Don't use stored CLI credentials
);
client.start().get();
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()
use github_copilot_sdk::{Client, ClientOptions};
let client = Client::start(
ClientOptions::default()
.with_github_token(user_access_token)
.with_use_logged_in_user(false),
).await?;
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient({
gitHubToken: userAccessToken, // Token from OAuth flow
useLoggedInUser: false, // Don't use stored CLI credentials
});
Поддерживаемые типы токенов:
gho_- Токены доступа пользователей OAuthghu_- GitHub Токены доступа пользователей приложенияgithub_pat_- Детализированные персональные токены доступа
Не поддерживаются:
ghp_- Классические личные токены доступа (устарели)
Когда использовать:
- Веб-приложения, в которых пользователи входят через GitHub
- SaaS-приложения, построенные поверх Copilot
- Любое многопользовательское приложение, где нужно делать запросы от имени разных пользователей
Дополнительные сведения см. в разделе Настройка GitHub OAuth.
Поворот маркеров GitHub на уровне сеанса
Для многопользовательских служб и интеграции задайте поставщик маркеров для каждого сеанса вместо хранения одного долгоживующего маркера. Среда выполнения вызывает поставщика для эффективного узла GitHub и определяет запрос как initial илиrefresh. Идентификатор сеанса отсутствует, только если облачный сеанс еще не получил его идентификатор.
Возвращает результат маркера с тегами или явную отмену. Каждый результат маркера должен содержать expiresIn: положительное количество секунд, оставшихся при завершении обратного вызова. Рабочие GitHub маркеры обычно длились восемь часов, поэтому 8 * 60 * 60 это обычное значение. Не устанавливайте статический маркер на сеанс и поставщик.
const session = await client.createSession({
gitHubTokenProvider: async ({ host, sessionId, reason }) => {
const token = await acquireGitHubToken({ host, sessionId, reason });
return {
kind: "token",
accessToken: token.value,
expiresIn: token.secondsRemaining,
};
},
});
async def provide_github_token(args):
token = await acquire_github_token(
host=args["host"],
session_id=args["session_id"],
reason=args["reason"],
)
return {
"kind": "token",
"accessToken": token.value,
"expiresIn": token.seconds_remaining,
}
session = await client.create_session(github_token_provider=provide_github_token)
session, err := client.CreateSession(ctx, &copilot.SessionConfig{
GitHubTokenProvider: func(args copilot.GitHubTokenProviderArgs) (*copilot.GitHubTokenProviderResult, error) {
token, secondsRemaining, err := acquireGitHubToken(args.Host, args.SessionID, args.Reason)
if err != nil {
return nil, err
}
return copilot.GitHubTokenResult(&copilot.GitHubToken{
AccessToken: token,
ExpiresIn: secondsRemaining,
}), nil
},
})
await using var session = await client.CreateSessionAsync(new SessionConfig
{
GitHubTokenProvider = async args =>
{
var token = await AcquireGitHubTokenAsync(args.Host, args.SessionId, args.Reason);
return GitHubTokenProviderResult.FromToken(new GitHubToken
{
AccessToken = token.Value,
ExpiresIn = token.SecondsRemaining,
});
},
});
var session = client.createSession(new SessionConfig()
.setGitHubTokenProvider(args ->
acquireGitHubToken(args.host(), args.sessionId(), args.reason())
.thenApply(token -> GitHubTokenProviderResult.token(
token.value(), token.secondsRemaining())))
.setOnPermissionRequest(PermissionHandler.APPROVE_ALL)
).get();
let provider = Arc::new(|args: GitHubTokenProviderArgs| async move {
let token = acquire_github_token(&args.host, args.session_id.as_ref(), args.reason).await?;
Ok(GitHubTokenProviderResult::Token(GitHubToken::new(
token.value,
token.seconds_remaining,
)))
});
let session = client
.create_session(SessionConfig::default().with_github_token_provider(provider))
.await?;
Среда выполнения выполняет initial приобретение в рамках создания или возобновления сеанса. Отмененное приобретение, ошибка поставщика, недопустимый ответ или маркер без стабильного удостоверения учетной записи отклоняет операцию создания или возобновления. Среда выполнения не возвращается к внешней проверке подлинности.
После установки сеанса среда выполнения выполняет асинхронную предварительную проверку перед каждой операцией, используюющей учетные данные. Он запрашивает, когда текущий refresh маркер имеет один час или меньше оставшегося. Неактивные сеансы не обновляются до следующей операции использования учетных данных. Среда выполнения не использует фоновые таймеры, воспроизведение на основе отклонений, распространение вызовов 401/403 или upscope для этого обратного вызова.
Переменные среды
Для автоматизации, CI/CD конвейеров и сценариев сервер-сервер можно аутентифицировать с помощью переменных среды.
Сведения об автоматизации с атрибутами организации, которая не должна использовать личный маркер доступа пользователя, см. в разделе Проверка подлинности между серверами.
Поддерживаемые переменные среды (в порядке приоритета):
COPILOT_GITHUB_TOKEN— рекомендуется для явного Copilot использованияGH_TOKEN— совместим с GitHub CLIGITHUB_TOKEN- GitHub Actions совместим
Принцип работы.
- Установите одну из поддерживаемых переменных среды с действительным токеном
- SDK автоматически обнаруживает и использует токен
Конфигурация SDK:
Изменения кода не требуются — SDK автоматически обнаруживает переменные среды:
using GitHub.Copilot;
// Token is read from environment variable automatically
await using CopilotClient client = new();
import copilot "github.com/github/copilot-sdk/go"
// Token is read from environment variable automatically
client := copilot.NewClient(nil)
import com.github.copilot.CopilotClient;
// Token is read from environment variable automatically
var client = new CopilotClient();
client.start().get();
from copilot import CopilotClient
# Token is read from environment variable automatically
client = CopilotClient()
await client.start()
use github_copilot_sdk::{Client, ClientOptions};
// Token is read from environment variable automatically
let client = Client::start(ClientOptions::default()).await?;
import { CopilotClient } from "@github/copilot-sdk";
// Token is read from environment variable automatically
const client = new CopilotClient();
Когда использовать:
- Конвейеры CI/CD (GitHub Actions, Jenkins и многое другое)
- Автоматическое тестирование
- Серверные приложения с сервисными аккаунтами
- Разработка, когда вы не хотите использовать интерактивный вход
БЁК (принеси свой ключ)
BYOK позволяет использовать собственные ключи API от поставщиков моделей, таких как Microsoft Foundry, OpenAI или Anthropic. Это полностью обходит аутентификацию GitHub Copilot.
Ключевые преимущества:
- Не требуется подписка на GitHub Copilot
- Использование корпоративных моделей
- Прямое выставление счетов у вашего поставщика модели
- Поддержка конечных точек, совместимых Microsoft Foundry, OpenAI, Anthropic и OpenAI
Полная информация см. БЁК (принеси свой ключ), включая:
- настройка Microsoft Foundry
- Параметры конфигурации поставщика
- Ограничения и рекомендации
- Полные примеры кода
Приоритет аутентификации
Когда доступно несколько методов аутентификации, SDK использует их в следующем порядке приоритета:
- Явно
gitHubToken- Токен передаётся напрямую клиенту SDK или конфигурации сессии - Токен прямого API -
GITHUB_COPILOT_API_TOKENсCOPILOT_API_URL - Токены **** -
COPILOT_GITHUB_TOKEN→GH_TOKEN→GITHUB_TOKEN - Сохранённые учетные данные OAuth — из предыдущего
copilotвхода в CLI - GitHub CLI -
gh authквалификации
Для многопользовательского серверного режима передайте сессионный gitHubToken, чтобы каждая сессия проходила с правильной идентичностью GitHub; см. Мультиарендные и серверные развертывания.
Отключение автовхода
Чтобы предотвратить автоматическое использование хранимых учетных данных или gh проверки подлинности интерфейса командной строки пакета SDK, настройте его для отключения резервного восстановления, вошедшего в систему:
await using var client = new CopilotClient(new CopilotClientOptions
{
UseLoggedInUser = false, // Only use explicit tokens
});
client := copilot.NewClient(&copilot.ClientOptions{
UseLoggedInUser: copilot.Bool(false), // Only use explicit tokens
})
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;
var client = new CopilotClient(new CopilotClientOptions()
.setUseLoggedInUser(false) // Only use explicit tokens
);
client.start().get();
client = CopilotClient({
"use_logged_in_user": False, # Only use explicit tokens
})
use github_copilot_sdk::{Client, ClientOptions};
let client = Client::start(
ClientOptions::default().with_use_logged_in_user(false),
).await?;
const client = new CopilotClient({
useLoggedInUser: false, // Only use explicit tokens
});
Дальнейшие действия
- БЁК (принеси свой ключ) — Научитесь использовать свои собственные API-ключи
- Build your first Copilot-powered app — Создайте своё первое приложение на базе Copilot
- Использование MCP-серверов с SDK GitHub Copilot — Подключение к внешним инструментам