Skip to main content

인증

GitHub Copilot SDK는 다양한 사용 사례에 맞게 여러 인증 방법을 지원합니다. 배포 시나리오와 가장 일치하는 방법을 선택합니다.

인증 방법

Method사용 사례Copilot 구독 필요
GitHub 로그인한 사용자사용자가 GitHub 사용하여 로그인하는 대화형 앱Yes
OAuth GitHub 앱OAuth를 통해 사용자를 대신하여 작동하는 앱Yes
환경 변수CI/CD, 자동화, 서버-서버Yes
BYOK (bring your own key)고유한 API 키 사용(Azure AI Foundry, OpenAI 등)No

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 통해 로그인하는 웹 애플리케이션
  • 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_KEY 또는 COPILOT_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();

다음 단계