メモ
Copilot SDK は現在 テクニカル プレビューです。 機能と可用性は変更される場合があります。
Azure デプロイでは、有効期間の長いキーではなく マネージド ID (Entra ID) が使用されることが多いため、 Copilot SDKで BYOK モードを使用するには、追加の手順を実行する必要があります。 SDK では Entra ID 認証がネイティブにサポートされていないため、プロバイダー構成のベアラー トークン フィールド (Python ではbearer_token 、Node.js/TypeScript および .NET では bearerToken ) を介して有効期間の短いベアラー トークンを使用できます。
このガイドでは、DefaultAzureCredential ライブラリのを使用して、Copilot SDKを介して Azure AI Foundry モデルで認証する方法について説明します。
どのように機能するのか
Azure AI Foundry の OpenAI 互換エンドポイントは、静的 API キーの代わりに Entra ID からベアラー トークンを受け入れます。 パターンは次のとおりです。
-
`DefaultAzureCredential`を使用して、`https://cognitiveservices.azure.com/.default` スコープのトークンを取得します。 - BYOK プロバイダー構成のベアラー トークン フィールドを使用してトークンを渡します (Python では
bearer_token、Node.js/TypeScript と .NET ではbearerToken)。 - 有効期限が切れる前にトークンを更新します。 トークンは通常、約 1 時間有効です。

前提条件
- Azure AI Foundry リソースがデプロイされた Azure サブスクリプション。
- インストールされている Azure Identity ライブラリ (Python 用
azure-identity、Node.js用の@azure/identity、または .NET 用のAzure.Identity)。 -
Copilot SDK インストールされました。 詳細については、「[AUTOTITLE](/copilot/how-tos/copilot-sdk/sdk-getting-started)」を参照してください。
Pythonの例
依存関係のインストール
pip install github-copilot-sdk azure-identity
基本的な使用方法
import asyncio
import os
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler
COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"
async def main():
# Get a token using Managed Identity, Azure CLI, or other credential chain
credential = DefaultAzureCredential()
token = credential.get_token(COGNITIVE_SERVICES_SCOPE).token
foundry_url = os.environ["AZURE_AI_FOUNDRY_RESOURCE_URL"]
client = CopilotClient()
await client.start()
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all,
model="gpt-4.1",
provider={
"type": "openai",
"base_url": f"{foundry_url.rstrip('/')}/openai/v1/",
"bearer_token": token, # Short-lived bearer token
"wire_api": "responses",
},
)
response = await session.send_and_wait({"prompt": "Hello from Managed Identity!"})
print(response.data.content)
await client.stop()
asyncio.run(main())
`AZURE_AI_FOUNDRY_RESOURCE_URL`を、Azure AI Foundry リソース URL (`https://myresource.openai.azure.com` など) を保持する環境変数に置き換えます。
実行時間の長いアプリケーションのトークン更新
ベアラー トークンは、約 1 時間後に期限切れになります。 サーバーまたは実行時間の長いエージェントの場合は、各セッションを作成する前にトークンを更新します。
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient, PermissionHandler
COGNITIVE_SERVICES_SCOPE = "https://cognitiveservices.azure.com/.default"
class ManagedIdentityCopilotAgent:
"""Copilot agent that refreshes Entra ID tokens for Azure AI Foundry."""
def __init__(self, foundry_url: str, model: str = "gpt-4.1"):
self.foundry_url = foundry_url.rstrip("/")
self.model = model
self.credential = DefaultAzureCredential()
self.client = CopilotClient()
def _get_provider_config(self) -> dict:
"""Build a provider config dict with a fresh bearer token."""
token = self.credential.get_token(COGNITIVE_SERVICES_SCOPE).token
return {
"type": "openai",
"base_url": f"{self.foundry_url}/openai/v1/",
"bearer_token": token,
"wire_api": "responses",
}
async def chat(self, prompt: str) -> str:
"""Send a prompt and return the response text."""
# Fresh token for each session
provider = self._get_provider_config()
session = await self.client.create_session(
on_permission_request=PermissionHandler.approve_all,
model=self.model,
provider=provider,
)
response = await session.send_and_wait({"prompt": prompt})
await session.disconnect()
return response.data.content if response else ""
Node.js/ TypeScript の例
import { DefaultAzureCredential } from "@azure/identity";
import { CopilotClient } from "@github/copilot-sdk";
const credential = new DefaultAzureCredential();
const tokenResponse = await credential.getToken(
"https://cognitiveservices.azure.com/.default"
);
const client = new CopilotClient();
const session = await client.createSession({
model: "gpt-4.1",
provider: {
type: "openai",
baseUrl: `${process.env.AZURE_AI_FOUNDRY_RESOURCE_URL}/openai/v1/`,
bearerToken: tokenResponse.token,
wireApi: "responses",
},
});
const response = await session.sendAndWait({ prompt: "Hello!" });
console.log(response?.data.content);
await client.stop();
.NET の例
using Azure.Identity;
using GitHub.Copilot;
var credential = new DefaultAzureCredential();
var token = await credential.GetTokenAsync(
new Azure.Core.TokenRequestContext(
new[] { "https://cognitiveservices.azure.com/.default" }));
await using var client = new CopilotClient();
var foundryUrl = Environment.GetEnvironmentVariable("AZURE_AI_FOUNDRY_RESOURCE_URL");
await using var session = await client.CreateSessionAsync(new SessionConfig
{
Model = "gpt-4.1",
Provider = new ProviderConfig
{
Type = "openai",
BaseUrl = $"{foundryUrl!.TrimEnd('/')}/openai/v1/",
BearerToken = token.Token,
WireApi = "responses",
},
});
var response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello from Managed Identity!" });
Console.WriteLine(response?.Data.Content);
環境の構成
次の環境変数が必要です。
| Variable | 説明 | 例 |
|---|---|---|
AZURE_AI_FOUNDRY_RESOURCE_URL | Azure AI Foundry リソースの URL | https://myresource.openai.azure.com |
API キー環境変数は必要ありません。認証は DefaultAzureCredentialによって処理され、自動的にサポートされます。
- Azure でホストされるアプリのマネージド ID (システム割り当てまたはユーザー割り当て)。
- ローカル開発用にAzure CLI (
az login)。 - サービス プリンシパルの環境変数 (
AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_CLIENT_SECRET)。 - Kubernetes のワークロード ID。
完全な資格情報チェーンについては、 DefaultAzureCredential のドキュメントを参照してください。
このパターンを使用する場合
| シナリオ | レコメンデーション |
|---|---|
| マネージド ID を使用した Azure でホストされるアプリ | このパターンを使用します。 |
| 既存の Azure AD サービス プリンシパルを持つアプリ | このパターンを使用します。 |
`az login` を使用したローカル開発 | このパターンを使用します。 |
| 静的 API キーを使用する Azure 以外の環境 | 標準の BYOK を使用します。 詳細については、 リポジトリの github/copilot-sdk を参照してください。 |
|
GitHub Copilot 利用可能なサブスクリプション | GitHub OAuth を使用します。 詳細については、 リポジトリの github/copilot-sdk を参照してください。 |
詳細については、次を参照してください。
- 静的 API キーの構成については、 リポジトリの
github/copilot-sdkを参照してください。 - サーバー側のデプロイについては、 バックエンド サービス用の Copilot SDK の設定 を参照してください。
- Azure ID ライブラリのドキュメントについては、 Azure ID クライアント ライブラリの概要に関するページを参照してください。