# 認証

GitHub Copilot SDK では、さまざまなユース ケースに合わせて複数の認証方法がサポートされています。 デプロイ シナリオに最も適した方法を選択します。

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

## 認証方法

| Method                                                                  | ユースケース(事例)                                  | Copilot サブスクリプションが必要です     |
| ----------------------------------------------------------------------- | ------------------------------------------- | -------------------------- |
| [GitHubサインインユーザー](#github-signed-in-user)                               | ユーザーがGitHubを使用してサインインする対話型アプリ               | はい                         |
| [GitHub OAuth アプリ](#github-oauth-app)                                   | OAuth を介してユーザーに代わって動作するアプリ                  | はい                         |
| [環境変数](#environment-variables)                                          | CI/CD, 自動化, サーバー間                           | はい                         |
| [サーバー間認証](/ja/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens) | 組織に起因する自動化と直接組織の課金                          | ユーザー サブスクリプションなし。組織ポリシーが必要 |
| [BYOK (独自のキーを持ち込む)](/ja/copilot/how-tos/copilot-sdk/auth/byok)          | 独自の API キーの使用 (Microsoft Foundry、OpenAI など) | いいえ                        |

## GitHub サインイン ユーザー

これは、Copilot CLI を対話形式で実行するときの既定の認証方法です。 ユーザーは OAuth デバイス フロー GitHub使用して認証を行い、SDK は保存された資格情報を使用します。

**しくみ**:

1. ユーザーは `copilot` CLI を実行し、GitHub OAuth 経由でサインインします
2. 資格情報はシステム キーチェーンに安全に格納されます
3. SDK では、保存されている資格情報が自動的に使用されます

**SDK の構成:**

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

// Default: uses logged-in user credentials
await using CopilotClient client = new();
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

// Default: uses logged-in user credentials
client := copilot.NewClient(nil)
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;

// Default: uses logged-in user credentials
var client = new CopilotClient();
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

# Default: uses logged-in user credentials
client = CopilotClient()
await client.start()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

// Default: uses logged-in user credentials
let client = Client::start(ClientOptions::default()).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

// Default: uses logged-in user credentials
const client = new CopilotClient();
```

</div>

</div>

**使用するタイミング:**

* ユーザーが直接対話するデスクトップ アプリケーション
* 開発環境とテスト環境
* ユーザーが対話形式でサインインできるシナリオ

## GitHub OAuth アプリ

OAuth GitHub アプリを使用して、アプリケーションを通じてユーザーを認証し、その資格情報を SDK に渡します。 これにより、アプリケーションは、アプリを承認するユーザーに代わって、Copilot API 要求を行うことができます。

**しくみ**:

1. ユーザーが OAuth GitHub アプリを承認する
2. アプリがユーザー アクセス トークン (`gho_` または `ghu_` プレフィックス) を受け取る
3. クライアント構成を使用してトークンを SDK に渡す

**SDK の構成:**

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
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
});
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
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
})
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;

var client = new CopilotClient(new CopilotClientOptions()
    .setGitHubToken(userAccessToken)  // Token from OAuth flow
    .setUseLoggedInUser(false)        // Don't use stored CLI credentials
);
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```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()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

let client = Client::start(
    ClientOptions::default()
        .with_github_token(user_access_token)
        .with_use_logged_in_user(false),
).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```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
});
```

</div>

</div>

**サポートされているトークンの種類:**

* `gho_` - OAuth ユーザー アクセス トークン
* `ghu_` - GitHub App のユーザー アクセス トークン
* `github_pat_` - きめ細かい個人用アクセス トークン

**サポート対象外:**

* `ghp_` - 従来の個人用アクセス トークン (非推奨)

**使用するタイミング:**

* ユーザーが GitHub 経由でサインインする Web アプリケーション
* Copilot上に構築された SaaS アプリケーション
* 異なるユーザーに代わって要求を行う必要があるマルチユーザー アプリケーション

詳細については、「[GitHub OAuth のセットアップ](/ja/copilot/how-tos/copilot-sdk/setup/github-oauth)」を参照してください。

## 環境変数

自動化、CI/CD パイプライン、およびサーバー間のシナリオでは、環境変数を使用して認証できます。

ユーザーの個人用アクセス トークンを使用しない組織属性の自動化については、 [サーバー間認証](/ja/copilot/how-tos/copilot-sdk/auth/server-to-server-tokens) を参照してください。

**サポートされている環境変数 (優先度順):**

1. `COPILOT_GITHUB_TOKEN` - Copilot を明示的に使用する場合に推奨
2. `GH_TOKEN` - GitHub CLI互換
3. `GITHUB_TOKEN` - GitHub Actions に対応

**しくみ**:

1. サポートされている環境変数の 1 つを有効なトークンで設定する
2. SDK はトークンを自動的に検出して使用します

**SDK の構成:**

コードの変更は必要ありません。SDK は環境変数を自動的に検出します。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

// Token is read from environment variable automatically
await using CopilotClient client = new();
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

// Token is read from environment variable automatically
client := copilot.NewClient(nil)
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;

// Token is read from environment variable automatically
var client = new CopilotClient();
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

# Token is read from environment variable automatically
client = CopilotClient()
await client.start()
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

// Token is read from environment variable automatically
let client = Client::start(ClientOptions::default()).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

// Token is read from environment variable automatically
const client = new CopilotClient();
```

</div>

</div>

**使用するタイミング:**

* CI/CD パイプライン (GitHub Actions、Jenkins など)
* 自動テスト
* サービス アカウントを持つサーバー側アプリケーション
* 対話型ログインを使用しない場合の開発

## BYOK (独自のキーを持ち込む)

BYOK を使用すると、Microsoft Foundry、OpenAI、Anthropicなどのモデル プロバイダーから独自の API キーを使用できます。 これにより、GitHub Copilot認証が完全にバイパスされます。

**主な利点:**

* GitHub Copilot サブスクリプションは必要ありません
* エンタープライズ モデルのデプロイを使用する
* モデルプロバイダーへの直接請求
* Microsoft Foundry、OpenAI、Anthropic、および OpenAI 互換エンドポイントのサポート

**次のような詳細については、 [BYOK (独自のキーを持ち込む)](/ja/copilot/how-tos/copilot-sdk/auth/byok) を参照してください**。

* Microsoft Foundry のセットアップ
* プロバイダー構成オプション
* 制限事項と考慮事項
* 完全なコード例

## 認証の優先順位

複数の認証方法を使用できる場合、SDK では次の優先順位で使用されます。

1. **明示的な `gitHubToken`** - SDK クライアントまたはセッション構成に直接渡されるトークン
2. **ダイレクト API トークン** - `GITHUB_COPILOT_API_TOKEN` with `COPILOT_API_URL`
3. **環境変数トークン** - `COPILOT_GITHUB_TOKEN` → `GH_TOKEN` → `GITHUB_TOKEN`
4. **保存された OAuth 資格情報** - 以前の `copilot` CLI ログインから
5. **GitHub CLI** - `gh auth` 資格情報

マルチユーザー サーバー モードの場合は、セッションごとに `gitHubToken` を渡して、各セッションが正しいGitHub ID で実行されるようにします。[マルチテナントとサーバーの展開](/ja/copilot/how-tos/copilot-sdk/setup/multi-tenancy) を参照してください。

## 自動ログインの無効化

SDK が保存された認証情報または `gh` CLI 認証を自動的に使用しないようにするには、ログイン済みユーザーへのフォールバックを無効にするように構成します。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
await using var client = new CopilotClient(new CopilotClientOptions
{
    UseLoggedInUser = false,  // Only use explicit tokens
});
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    UseLoggedInUser: copilot.Bool(false),  // Only use explicit tokens
})
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;

var client = new CopilotClient(new CopilotClientOptions()
    .setUseLoggedInUser(false)  // Only use explicit tokens
);
client.start().get();
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
client = CopilotClient({
    "use_logged_in_user": False,  # Only use explicit tokens
})
```

</div>

<div class="ghd-codetab" data-lang="rust" data-label="Rust"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Rust</div>

```rust
use github_copilot_sdk::{Client, ClientOptions};

let client = Client::start(
    ClientOptions::default().with_use_logged_in_user(false),
).await?;
```

</div>

<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
const client = new CopilotClient({
    useLoggedInUser: false,  // Only use explicit tokens
});
```

</div>

</div>

## 次のステップ

* [BYOK (独自のキーを持ち込む)](/ja/copilot/how-tos/copilot-sdk/auth/byok) - 独自の API キーを使用する方法について説明します
* [初めてのCopilot搭載アプリを構築する](/ja/copilot/how-tos/copilot-sdk/getting-started) - 初めてのCopilot搭載アプリを構築する
* [GitHub Copilot SDK での MCP サーバーの使用](/ja/copilot/how-tos/copilot-sdk/features/mcp) - 外部ツールに接続する