Примечание.
Второй пилот SDK в настоящее время находится в Technical Preview. Функциональность и доступность могут меняться.
«Подключайте пользователей, GitHub Copilot предоставляя GitHub аутентификацию аккаунта непосредственно в вашем приложении.
**Лучше всего для:** Многопользовательские приложения, внутренние инструменты с управлением доступом организации, SaaS-продукты и приложения, где у пользователей уже есть GitHub учетные записи.
Принцип работы
Вы создаёте GitHub приложение OAuth (или GitHub App), пользователи его авторизуют, и вы передаёте их токен доступа SDK.
Copilot Запросы делаются от имени каждого аутентифицированного пользователя с использованием его Copilot подписки. Для подробных диаграмм последовательностей этого потока и архитектуры см. репозиторийgithub/copilot-sdk.
**Ключевые характеристики:**
- Каждый пользователь проходит аутентификацию через свой аккаунт GitHub .
-
Copilot Использование оплачивается по подписке каждого пользователя. - Поддерживает GitHub организации и корпоративные аккаунты.
- Ваше приложение никогда не обрабатывает ключи API модели —GitHub управляет всем.
Шаг 1: Создайте приложение GitHub OAuth
- Перейдите в GitHub Настройки > Настройки разработчика > Приложения OAuth > Новое приложение OAuth. Для организаций перейдите в Настройки организации > Настройки разработчика.
- Заполните следующие поля:
*
Название приложения: Название вашего приложения.
*
URL главной страницы: URL вашего приложения.
*
URL обратного вызова авторизации: ваша конечная точка обратного вызова OAuth (например,
https://YOUR-APP.com/auth/callback). ЗаменитеYOUR-APP.comна домен. - Запишите свой клиентский идентификатор и сгенерируйте секрет клиента.
Примечание.
И GitHub Apps то, и приложения OAuth работают с SDK. GitHub Apps предлагают более тонкие разрешения и рекомендуются для новых проектов. Приложения OAuth проще настроить. Поток токенов с точки зрения SDK остаётся таким же.
Шаг 2: Реализовать поток OAuth
Ваше приложение обрабатывает стандартный GitHub поток OAuth. Ниже показана система обмена токенами на сервере:
// Server-side: exchange authorization code for user token
async function handleOAuthCallback(code: string): Promise<string> {
const response = await fetch("https://github.com/login/oauth/access_token", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
client_id: process.env.GITHUB_CLIENT_ID,
client_secret: process.env.GITHUB_CLIENT_SECRET,
code,
}),
});
const data = await response.json();
return data.access_token; // gho_xxxx or ghu_xxxx
}
Шаг 3: Передайте токен SDK
Создайте SDK-клиент для каждого аутентифицированного пользователя, передавая ему токен.
Node.js / TypeScript
import { CopilotClient } from "@github/copilot-sdk";
// Create a client for an authenticated user
function createClientForUser(userToken: string): CopilotClient {
return new CopilotClient({
githubToken: userToken,
useLoggedInUser: false, // Don't fall back to CLI sign-in
});
}
// Usage
const client = createClientForUser("USER-ACCESS-TOKEN");
const session = await client.createSession({
sessionId: `user-${userId}-session`,
model: "gpt-4.1",
});
const response = await session.sendAndWait({ prompt: "Hello!" });
Замените USER-ACCESS-TOKEN на пользовательский токен доступа OAuth (например, gho_xxxx).
Python
from copilot import CopilotClient, PermissionHandler
def create_client_for_user(user_token: str) -> CopilotClient:
return CopilotClient({
"github_token": user_token,
"use_logged_in_user": False,
})
# Usage
client = create_client_for_user("USER-ACCESS-TOKEN")
await client.start()
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all,
model="gpt-4.1",
session_id=f"user-{user_id}-session",
)
response = await session.send_and_wait({"prompt": "Hello!"})
Вперед
func createClientForUser(userToken string) *copilot.Client {
return copilot.NewClient(&copilot.ClientOptions{
GithubToken: userToken,
UseLoggedInUser: copilot.Bool(false),
})
}
// Usage
client := createClientForUser("USER-ACCESS-TOKEN")
client.Start(ctx)
defer client.Stop()
session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
SessionID: fmt.Sprintf("user-%s-session", userID),
Model: "gpt-4.1",
})
response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "Hello!"})
.NET
CopilotClient CreateClientForUser(string userToken) =>
new CopilotClient(new CopilotClientOptions
{
GithubToken = userToken,
UseLoggedInUser = false,
});
// Usage
await using var client = CreateClientForUser("USER-ACCESS-TOKEN");
await using var session = await client.CreateSessionAsync(new SessionConfig
{
SessionId = $"user-{userId}-session",
Model = "gpt-4.1",
});
var response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello!" });
Доступ к предприятиям и организациям
GitHub OAuth естественно поддерживает корпоративные сценарии. При аутентификации GitHubпользователей включаются членства в их организации и корпоративных ассоциациях.
Проверьте членство в организации
После OAuth вы можете проверить, принадлежит ли пользователь вашей организации:
async function verifyOrgMembership(
token: string,
requiredOrg: string
): Promise<boolean> {
const response = await fetch("https://api.github.com/user/orgs", {
headers: { Authorization: `Bearer ${token}` },
});
const orgs = await response.json();
return orgs.some((org: any) => org.login === requiredOrg);
}
// In your auth flow
const token = await handleOAuthCallback(code);
if (!await verifyOrgMembership(token, "YOUR-ORG")) {
throw new Error("User is not a member of the required organization");
}
const client = createClientForUser(token);
Замените YOUR-ORG название вашей GitHub организации.
Управляемые корпоративными пользователями (EMU)
Для управляемые учетные записи пользователей, поток идентичен. Пользователи EMU аутентифицируются через GitHub OAuth, как и любой другой пользователь, а корпоративные политики (ограничения IP, SAML SSO) GitHub выполняются автоматически.
// No special SDK configuration needed for EMU
const client = new CopilotClient({
githubToken: emuUserToken,
useLoggedInUser: false,
});
Поддерживаемые типы токенов
| Префикс токена | Исходный материал | Поддерживается |
|---|---|---|
gho_ | Токен доступа пользователя OAuth | Да |
ghu_ |
GitHub App Пользовательский токен доступа | Да |
| github_pat_ | Fine-grained personal access token | Да |
| ghp_ | Personal access token (classic) | Нет (закрытие) |
Управление жизненным циклом токена
Ваше приложение отвечает за хранение токенов, обновление и обработку истечения срока действия. SDK использует тот токен, который вы предоставите — он не управляет жизненным циклом OAuth.
Паттерн обновления токенов
async function getOrRefreshToken(userId: string): Promise<string> {
const stored = await tokenStore.get(userId);
if (stored && !isExpired(stored)) {
return stored.accessToken;
}
if (stored?.refreshToken) {
const refreshed = await refreshGitHubToken(stored.refreshToken);
await tokenStore.set(userId, refreshed);
return refreshed.accessToken;
}
throw new Error("User must re-authenticate");
}
Многопользовательские паттерны
Один клиент на пользователя (рекомендуется)
Каждый пользователь получает свой SDK-клиент со своим токеном. Это обеспечивает самую сильную изоляцию.
const clients = new Map<string, CopilotClient>();
function getClientForUser(userId: string, token: string): CopilotClient {
if (!clients.has(userId)) {
clients.set(userId, new CopilotClient({
githubToken: token,
useLoggedInUser: false,
}));
}
return clients.get(userId)!;
}
Ограничения
| Ограничение | Сведения |
|---|
**
Copilot Требуется подписка** | Каждому пользователю нужна активная GitHub Copilot подписка. |
| Управление токенами — ваша ответственность | Вы должны хранить, обновлять и обрабатывать истечение токена. | | ** GitHub Требуется учетная запись** | Пользователи должны иметь GitHub аккаунты. | | Ограничения по скорости на пользователя | Использование зависит от тарифных лимитов Copilot каждого пользователя. |
Дальнейшие действия
- Чтобы запустить SDK на серверах, см. Настройка Copilot SDK для бэкенд-сервисов.
- Для работы с множеством одновременных пользователей см. AUTOTITLE.
- Для установки и вашего первого сообщения смотрите Начало работы с Copilot SDK.