{"meta":{"title":"認証","intro":"GitHub Copilot SDK では、さまざまなユース ケースに合わせて複数の認証方法がサポートされています。 デプロイ シナリオに最も適した方法を選択します。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/copilot","title":"GitHub Copilot"},{"href":"/ja/copilot/how-tos","title":"方法"},{"href":"/ja/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/ja/copilot/how-tos/copilot-sdk/auth","title":"認証"},{"href":"/ja/copilot/how-tos/copilot-sdk/auth/authenticate","title":"Authenticate"}],"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を使用してサインインする対話型アプリ               | はい                         |\n| [GitHub OAuth アプリ](#github-oauth-app)                                   | OAuth を介してユーザーに代わって動作するアプリ                  | はい                         |\n| [環境変数](#environment-variables)                                          | CI/CD, 自動化, サーバー間                           | はい                         |\n| [サーバー間認証](/ja/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens) | 組織に起因する自動化と直接組織の課金                          | ユーザー サブスクリプションなし。組織ポリシーが必要 |\n| [BYOK (独自のキーを持ち込む)](/ja/copilot/how-tos/copilot-sdk/auth/byok)          | 独自の API キーの使用 (Microsoft Foundry、OpenAI など) | いいえ                        |\n\n## GitHub サインイン ユーザー\n\nこれは、Copilot CLI を対話形式で実行するときの既定の認証方法です。 ユーザーは OAuth デバイス フロー GitHub使用して認証を行い、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 App のユーザー アクセス トークン\n* `github_pat_` - きめ細かい個人用アクセス トークン\n\n**サポート対象外:**\n\n* `ghp_` - 従来の個人用アクセス トークン (非推奨)\n\n**使用するタイミング:**\n\n* ユーザーが GitHub 経由でサインインする Web アプリケーション\n* Copilot上に構築された SaaS アプリケーション\n* 異なるユーザーに代わって要求を行う必要があるマルチユーザー アプリケーション\n\n詳細については、「[GitHub OAuth のセットアップ](/ja/copilot/how-tos/copilot-sdk/setup/github-oauth)」を参照してください。\n\n## 環境変数\n\n自動化、CI/CD パイプライン、およびサーバー間のシナリオでは、環境変数を使用して認証できます。\n\nユーザーの個人用アクセス トークンを使用しない組織属性の自動化については、 [サーバー間認証](/ja/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. サポートされている環境変数の 1 つを有効なトークンで設定する\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 (独自のキーを持ち込む)](/ja/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` with `COPILOT_API_URL`\n3. **環境変数トークン** - `COPILOT_GITHUB_TOKEN` → `GH_TOKEN` → `GITHUB_TOKEN`\n4. **保存された OAuth 資格情報** - 以前の `copilot` CLI ログインから\n5. **GitHub CLI** - `gh auth` 資格情報\n\nマルチユーザー サーバー モードの場合は、セッションごとに `gitHubToken` を渡して、各セッションが正しいGitHub ID で実行されるようにします。[マルチテナントとサーバーの展開](/ja/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 (独自のキーを持ち込む)](/ja/copilot/how-tos/copilot-sdk/auth/byok) - 独自の API キーを使用する方法について説明します\n* [初めてのCopilot搭載アプリを構築する](/ja/copilot/how-tos/copilot-sdk/getting-started) - 初めてのCopilot搭載アプリを構築する\n* [GitHub Copilot SDK での MCP サーバーの使用](/ja/copilot/how-tos/copilot-sdk/features/mcp) - 外部ツールに接続する"}