Skip to main content

認証

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

認証方法

Methodユースケース(事例)Copilot サブスクリプションが必要です
GitHubサインインユーザーユーザーがGitHubを使用してサインインする対話型アプリはい
OAuth GitHub AppOAuth を介してユーザーに代わって動作するアプリはい
環境変数CI/CD, 自動化, サーバー間はい
BYOK (bring your own key)独自の API キー (Azure AI Foundry、OpenAI など) の使用いいえ

GitHub サインイン ユーザー

これは、Copilot CLI を対話形式で実行するときの既定の認証方法です。 ユーザーは OAuth デバイス フロー GitHub使用して認証を行い、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 App のユーザー アクセス トークン
  • github_pat_ - きめ細かい個人用アクセス トークン

サポート対象外:

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

使用するタイミング:

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

環境変数

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

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

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

しくみ:

  1. サポートされている環境変数の 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 with COPILOT_API_URL
  4. 環境変数トークン - COPILOT_GITHUB_TOKENGH_TOKENGITHUB_TOKEN
  5. 保存された OAuth 資格情報 - 以前の copilot CLI ログインから
  6. GitHub CLI - gh auth 資格情報

自動ログインの無効化

保存された資格情報または CLI 認証 gh SDK が自動的に使用されないようにするには、 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();

次のステップ