참고
코필로트 SDK가 현재 기술 미리 보기에 있습니다. 기능 및 가용성은 변경될 수 있습니다.
직접 애플리케이션 내에서 GitHub 계정 인증을 제공합니다. 그 결과 사용자가 GitHub Copilot에 연결됩니다.
**최적 대상:** 다중 사용자 앱, 조직 액세스 제어가 있는 내부 도구, SaaS 제품 및 사용자가 이미 GitHub 계정이 있는 앱.
작동 방식
OAuth 앱(또는GitHub)을 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을 귀하의 도메인으로 대체합니다. -
**클라이언트 ID**를 확인하고 **클라이언트 암호를** 생성합니다.
참고
OAuth 앱과 GitHub Apps은 모두 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`)으로 교체합니다.
파이썬
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 사용자는 다른 사용자와 마찬가지로 OAuth를 통해 GitHub 인증하고 엔터프라이즈 정책(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)!;
}
제한점
| Limitation | 세부 정보 |
|---|
**
Copilot 구독 필요** | 각 사용자에게는 활성 GitHub Copilot 구독이 필요합니다. |
| 토큰 관리는 사용자의 책임입니다. | 토큰 만료를 저장, 새로 고치고 처리해야 합니다. | | ** GitHub 필요한 계정** | 사용자에게 계정이 있어야 합니다 GitHub . | | 사용자당 속도 제한 | 사용량에는 각 사용자의 Copilot 속도 제한이 적용됩니다. |
다음 단계
- 서버에서 SDK를 실행하려면 백 엔드 서비스에 대한 Copilot SDK 설정을 참조하세요.
- 많은 동시 사용자를 처리하려면 Copilot SDK 배포 크기 조정을 참조하세요.
- 설치 및 첫 번째 메시지는 Copilot SDK 사용 시작하기을 참조하세요.