{"meta":{"title":"인증","intro":"GitHub Copilot SDK는 다양한 사용 사례에 맞게 여러 인증 방법을 지원합니다. 배포 시나리오와 가장 일치하는 방법을 선택합니다.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ko/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ko/enterprise-cloud@latest/copilot/how-tos","title":"방법"},{"href":"/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"코필로트 SDK"},{"href":"/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth","title":"인증"},{"href":"/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/authenticate","title":"인증"}],"documentType":"article"},"body":"# 인증\n\nGitHub Copilot SDK는 다양한 사용 사례에 맞게 여러 인증 방법을 지원합니다. 배포 시나리오와 가장 일치하는 방법을 선택합니다.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## 인증 방법\n\n| Method                                                                                           | 사용 사례                                         | Copilot 구독 필요       |\n| ------------------------------------------------------------------------------------------------ | --------------------------------------------- | ------------------- |\n| [GitHub 로그인한 사용자](#github-signed-in-user)                                                        | 사용자가 GitHub 사용하여 로그인하는 대화형 앱                  | Yes                 |\n| [GitHub OAuth 앱](#github-oauth-app)                                                              | OAuth를 통해 사용자를 대신하여 작동하는 앱                    | Yes                 |\n| [환경 변수](#environment-variables)                                                                  | CI/CD, 자동화, 서버-서버                             | Yes                 |\n| [서버-서버 인증](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens) | 조직 귀속 자동화 및 조직 직접 청구                          | 사용자 구독 없음; 조직 정책 필요 |\n| [BYOK(사용자 고유의 키 가져오기)](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/byok)        | 사용자 고유의 API 키 사용(Microsoft Foundry, OpenAI 등) | No                  |\n\n## GitHub 로그인 사용자\n\nCopilot CLI를 대화형으로 실행할 때 기본 인증 방법입니다. 사용자는 GitHub OAuth 디바이스 흐름을 통해 인증하고 SDK는 저장된 자격 증명을 사용합니다.\n\n**작동 방식:**\n\n1. 사용자는 `copilot` CLI를 실행하고 GitHub OAuth를 통해 로그인합니다.\n2. 자격 증명은 시스템 키 집합에 안전하게 저장됩니다.\n3. SDK는 저장된 자격 증명을 자동으로 사용합니다.\n\n**SDK 구성:**\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\n\n// Default: uses logged-in user credentials\nawait using CopilotClient client = new();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nimport copilot \"github.com/github/copilot-sdk/go\"\n\n// Default: uses logged-in user credentials\nclient := copilot.NewClient(nil)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\n\n// Default: uses logged-in user credentials\nvar client = new CopilotClient();\nclient.start().get();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient\n\n# Default: uses logged-in user credentials\nclient = CopilotClient()\nawait client.start()\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions};\n\n// Default: uses logged-in user credentials\nlet client = Client::start(ClientOptions::default()).await?;\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\n// Default: uses logged-in user credentials\nconst client = new CopilotClient();\n```\n\n</div>\n\n</div>\n\n**사용 시기:**\n\n* 사용자가 직접 상호 작용하는 데스크톱 애플리케이션\n* 개발 및 테스팅 환경\n* 사용자가 대화형으로 로그인할 수 있는 모든 시나리오\n\n## GitHub OAuth 앱\n\nOAuth GitHub 앱을 사용하여 애플리케이션을 통해 사용자를 인증하고 해당 자격 증명을 SDK에 전달합니다. 이를 통해 애플리케이션은 앱에 권한을 부여한 사용자를 대신해 Copilot API 요청을 보낼 수 있습니다.\n\n**작동 방식:**\n\n1. 사용자가 OAuth GitHub 앱에 권한을 부여합니다.\n2. 앱이 사용자 액세스 토큰(`gho_` 또는 `ghu_` 접두사)을 받습니다.\n3. 클라이언트 구성을 통해 SDK에 토큰 전달\n\n**SDK 구성:**\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\n\nawait using var client = new CopilotClient(new CopilotClientOptions\n{\n    GitHubToken = userAccessToken,     // Token from OAuth flow\n    UseLoggedInUser = false,           // Don't use stored CLI credentials\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nimport copilot \"github.com/github/copilot-sdk/go\"\n\nclient := copilot.NewClient(&copilot.ClientOptions{\n    GitHubToken:       userAccessToken,      // Token from OAuth flow\n    UseLoggedInUser:   copilot.Bool(false),  // Don't use stored CLI credentials\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n<!-- docs-validate: skip -->\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\n\nvar client = new CopilotClient(new CopilotClientOptions()\n    .setGitHubToken(userAccessToken)  // Token from OAuth flow\n    .setUseLoggedInUser(false)        // Don't use stored CLI credentials\n);\nclient.start().get();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient\n\nclient = CopilotClient({\n    \"github_token\": user_access_token,  # Token from OAuth flow\n    \"use_logged_in_user\": False,        # Don't use stored CLI credentials\n})\nawait client.start()\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions};\n\nlet client = Client::start(\n    ClientOptions::default()\n        .with_github_token(user_access_token)\n        .with_use_logged_in_user(false),\n).await?;\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({\n    gitHubToken: userAccessToken,  // Token from OAuth flow\n    useLoggedInUser: false,        // Don't use stored CLI credentials\n});\n```\n\n</div>\n\n</div>\n\n**지원되는 토큰 유형:**\n\n* `gho_` - OAuth 사용자 액세스 토큰\n* `ghu_` - 앱 사용자 액세스 토큰 GitHub\n* `github_pat_` - 세분화된 개인용 액세스 토큰\n\n**지원되지 않음:**\n\n* `ghp_` - 클래식 개인용 액세스 토큰(사용되지 않음)\n\n**사용 시기:**\n\n* 사용자가 GitHub 통해 로그인하는 웹 애플리케이션\n* Copilot 위에 빌드되는 SaaS 애플리케이션\n* 다른 사용자를 대신하여 요청을 수행해야 하는 모든 다중 사용자 애플리케이션\n\n자세한 내용은 [GitHub OAuth 설정](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/setup/github-oauth)을(를) 참조하세요.\n\n## 환경 변수\n\n자동화, CI/CD 파이프라인 및 서버-서버 시나리오의 경우 환경 변수를 사용하여 인증할 수 있습니다.\n\n사용자의 개인 액세스 토큰을 사용하지 않아야 하는 조직 특성 자동화는 [서버-서버 인증](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens)을 참조하세요.\n\n**지원되는 환경 변수(우선 순위):**\n\n1. `COPILOT_GITHUB_TOKEN` - 명시적 Copilot 사용에 권장됨\n2. `GH_TOKEN` - GitHub CLI 호환\n3. `GITHUB_TOKEN` - GitHub Actions 호환\n\n**작동 방식:**\n\n1. 유효한 토큰으로 지원되는 환경 변수 중 하나를 설정합니다.\n2. SDK는 토큰을 자동으로 검색하고 사용합니다.\n\n**SDK 구성:**\n\n코드 변경이 필요하지 않습니다. SDK는 환경 변수를 자동으로 검색합니다.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing GitHub.Copilot;\n\n// Token is read from environment variable automatically\nawait using CopilotClient client = new();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nimport copilot \"github.com/github/copilot-sdk/go\"\n\n// Token is read from environment variable automatically\nclient := copilot.NewClient(nil)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\n\n// Token is read from environment variable automatically\nvar client = new CopilotClient();\nclient.start().get();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotClient\n\n# Token is read from environment variable automatically\nclient = CopilotClient()\nawait client.start()\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions};\n\n// Token is read from environment variable automatically\nlet client = Client::start(ClientOptions::default()).await?;\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\n// Token is read from environment variable automatically\nconst client = new CopilotClient();\n```\n\n</div>\n\n</div>\n\n**사용 시기:**\n\n* CI/CD 파이프라인(GitHub Actions, Jenkins 등)\n* 자동화된 테스트\n* 서비스 계정이 있는 서버 쪽 애플리케이션\n* 대화형 로그인을 사용하지 않으려는 경우 개발\n\n## BYOK(사용자 고유의 키 가져오기)\n\nBYOK를 사용하면 Microsoft Foundry, OpenAI 또는 Anthropic 같은 모델 공급자의 고유한 API 키를 사용할 수 있습니다. 이렇게 하면 GitHub Copilot 인증이 완전히 무시됩니다.\n\n**주요 이점:**\n\n* GitHub Copilot 구독 필요 없음\n* 엔터프라이즈 모델 배포 사용\n* 모델 공급자를 사용하여 직접 청구\n* Microsoft Foundry, OpenAI, Anthropic 및 OpenAI 호환 엔드포인트 지원\n\n**다음을 비롯한 자세한 내용은 [BYOK(사용자 고유의 키 가져오기)](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/byok) 을 참조하세요**.\n\n* Microsoft Foundry 설정\n* 공급자 구성 옵션\n* 제한 사항 및 고려 사항\n* 전체 코드 예제\n\n## 인증 우선 순위\n\n여러 인증 방법을 사용할 수 있는 경우 SDK는 이 우선 순위 순서로 사용합니다.\n\n1. **명시적 `gitHubToken`** - SDK 클라이언트 또는 세션 구성에 직접 전달되는 토큰\n2. **직접 API 토큰** - `GITHUB_COPILOT_API_TOKEN` 포함 `COPILOT_API_URL`\n3. **환경 변수 토큰** - `COPILOT_GITHUB_TOKEN``GH_TOKEN` → → `GITHUB_TOKEN`\n4. **저장된 OAuth 자격 증명** - 이전 `copilot` CLI 로그인에서\n5. **GitHub CLI** - `gh auth` 자격 증명\n\n다중 사용자 서버 모드의 경우 각 세션이 올바른 GitHub ID로 실행되도록 세션별 `gitHubToken` 전달합니다. [다중 테넌트 및 서버 배포](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/setup/multi-tenancy) 참조하세요.\n\n## 자동 로그인 사용 안 림\n\nSDK가 저장된 자격 증명 또는 `gh` CLI 인증을 자동으로 사용하지 않도록 하려면 로그인한 사용자 대체를 사용하지 않도록 구성합니다.\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nawait using var client = new CopilotClient(new CopilotClientOptions\n{\n    UseLoggedInUser = false,  // Only use explicit tokens\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nclient := copilot.NewClient(&copilot.ClientOptions{\n    UseLoggedInUser: copilot.Bool(false),  // Only use explicit tokens\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotClient;\nimport com.github.copilot.rpc.*;\n\nvar client = new CopilotClient(new CopilotClientOptions()\n    .setUseLoggedInUser(false)  // Only use explicit tokens\n);\nclient.start().get();\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nclient = CopilotClient({\n    \"use_logged_in_user\": False,  # Only use explicit tokens\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions};\n\nlet client = Client::start(\n    ClientOptions::default().with_use_logged_in_user(false),\n).await?;\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nconst client = new CopilotClient({\n    useLoggedInUser: false,  // Only use explicit tokens\n});\n```\n\n</div>\n\n</div>\n\n## 다음 단계\n\n* [BYOK(사용자 고유의 키 가져오기)](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/auth/byok) - 사용자 고유의 API 키를 사용하는 방법 알아보기\n* [첫 번째 Copilot 기반 앱 빌드](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/getting-started) - 첫 번째 Copilot 지원 앱 빌드\n* [GitHub Copilot SDK에서 MCP 서버 사용](/ko/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/mcp) - 외부 도구에 연결"}