Hinweis
Copilot SDK ist zurzeit in Technische Preview. Funktionalität und Verfügbarkeit können geändert werden.
Da Azure-Bereitstellungen häufig verwaltete Identität (Entra-ID) anstelle von langlebigen Schlüsseln verwenden, müssen Sie zusätzliche Schritte ausführen, um den BYOK-Modus zu Copilot SDKverwenden. Da das SDK die Entra-ID-Authentifizierung nicht nativ unterstützt, können Sie ein kurzlebiges Bearertoken über das Bearertokenfeld der Anbieterkonfiguration (bearer_token in Python, bearerToken in Node.js/ TypeScript und .NET) verwenden.
In diesem Leitfaden wird gezeigt, wie DefaultAzureCredential Sie mithilfe der Azure Identity-Bibliothek die Authentifizierung mit Azure AI Foundry-Modellen durchführen Copilot SDK.
So funktioniert es
Der openAI-kompatible Endpunkt von Azure AI Foundry akzeptiert Bearertoken von Entra-ID anstelle statischer API-Schlüssel. Das Muster lautet:
- Verwenden Sie
DefaultAzureCredential, um ein Token für denhttps://cognitiveservices.azure.com/.defaultGeltungsbereich zu erhalten. - Übergeben Sie das Token mithilfe des Bearertokenfelds in der BYOK-Anbieterkonfiguration (
bearer_tokenin Python,bearerTokenin Node.js / TypeScript und .NET). - Aktualisieren Sie das Token, bevor es abläuft. Token sind in der Regel für etwa eine Stunde gültig.

Voraussetzungen
- Ein Azure-Abonnement mit einer implementierten Azure AI Foundry-Ressource.
- Die Azure Identity-Bibliothek installiert (
azure-identityfür Python,@azure/identityfür Node.jsoderAzure.Identityfür .NET). -
Copilot SDK Installiert. Weitere Informationen findest du unter [AUTOTITLE](/copilot/how-tos/copilot-sdk/sdk-getting-started).
Python-Beispiel
Abhängigkeiten installieren
pip install github-copilot-sdk azure-identity
Grundlegende Nutzung
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())
Ersetzen Sie durch AZURE_AI_FOUNDRY_RESOURCE_URL die Umgebungsvariable, die Ihre Azure AI Foundry-Ressourcen-URL enthält (z. B https://myresource.openai.azure.com. ).
Tokenaktualisierung für lang laufende Anwendungen
Bearertoken laufen nach ungefähr einer Stunde ab. Aktualisieren Sie das Token für Server oder langlaufende Agenten, bevor Sie jede Sitzung erstellen.
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 ""
beispiel für 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-Beispiel
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);
Umgebungskonfiguration
Die folgende Umgebungsvariable ist erforderlich:
| Variable | Beschreibung | Beispiel |
|---|---|---|
AZURE_AI_FOUNDRY_RESOURCE_URL | Ihre Azure AI Foundry-Ressourcen-URL | https://myresource.openai.azure.com |
Es ist keine API-Schlüsselumgebungsvariable erforderlich – die Authentifizierung wird von DefaultAzureCredential, die automatisch unterstützt:
-
**Verwaltete Identität** (vom System zugewiesen oder vom Benutzer zugewiesen) für von Azure gehostete Apps. -
**Azure CLI** (`az login`) für die lokale Entwicklung. -
**Umgebungsvariablen** (`AZURE_CLIENT_ID`, `AZURE_TENANT_ID`, `AZURE_CLIENT_SECRET`) für Dienstprinzipale. -
**Workload Identity** for Kubernetes.
Die vollständige Anmeldeinformationskette finden Sie in der DefaultAzureCredential-Dokumentation.
Wann Sie dieses Muster verwenden sollten
| Szenario | Empfehlung |
|---|---|
| Von Azure gehostete App mit verwalteter Identität | Verwenden Sie dieses Muster. |
| App mit vorhandenem Azure AD Dienstprinzipal | Verwenden Sie dieses Muster. |
Lokale Entwicklung mit az login | Verwenden Sie dieses Muster. |
| Nicht-Azure-Umgebung mit statischem API-Schlüssel | Verwenden Sie standard BYOK. Weitere Informationen finden Sie unter BYOK im github/copilot-sdk Repository. |
GitHub Copilot Abonnement verfügbar | Verwenden Sie GitHub OAuth. Weitere Informationen finden Sie unter [GitHub OAuth](https://github.com/github/copilot-sdk/blob/main/docs/setup/github-oauth.md) im `github/copilot-sdk` Repository. |
Weiterführende Lektüre
- Informationen zur Konfiguration statischer API-Schlüssel finden Sie unter BYOK im
github/copilot-sdkRepository. - Informationen zur serverseitigen Bereitstellung finden Sie unter Einrichten des Copilot SDK für Back-End-Dienste.
- Eine Dokumentation zur Azure Identity-Bibliothek finden Sie in der Übersicht über die Azure Identity-Clientbibliothek.