In diesem Handbuch wird gezeigt, wie Sie die API des Azure Identity SDK DefaultAzureCredential verwenden, um sich mit Microsoft Foundry-Modellen über das Copilot SDK zu authentifizieren.
So funktioniert es
Der OpenAI-kompatible Endpunkt von Microsoft Foundry akzeptiert Bearer-Token von Microsoft Entra ID anstelle von statischen API-Schlüsseln. Das Muster lautet:
- Verwenden Sie
DefaultAzureCredential, um ein Token für den Bereichhttps://ai.azure.com/.defaultzu erhalten - Übergeben Sie das Token als
bearer_tokenin der BYOK-Provider-Konfiguration - Aktualisieren Sie das Token, bevor es abläuft (Token sind in der Regel für ~1 Stunde gültig)

Codebeispiele
Voraussetzungen
Installieren Sie die Azure Identity- und Copilot SDK-Pakete für Ihre Sprache:
Codesprachen navigation
dotnet add package GitHub.Copilot.SDK
dotnet add package Azure.Core
pip install github-copilot-sdk azure-identity
npm install @github/copilot-sdk @azure/identity
Grundlegende Nutzung
Rufen Sie mit DefaultAzureCredential ein Token ab und übergeben Sie es als Bearer-Token in Ihrer Anbieterkonfiguration:
Codesprachen navigation
using Azure.Core;
using Azure.Identity;
using GitHub.Copilot;
DefaultAzureCredential credential = new(
DefaultAzureCredential.DefaultEnvironmentVariableName);
AccessToken token = await credential.GetTokenAsync(
new TokenRequestContext(new[] { "https://ai.azure.com/.default" }));
await using CopilotClient client = new();
string? foundryUrl = Environment.GetEnvironmentVariable("FOUNDRY_RESOURCE_URL");
await using CopilotSession session = await client.CreateSessionAsync(new SessionConfig
{
Model = "gpt-5.5",
Provider = new ProviderConfig
{
Type = "openai",
BaseUrl = $"{foundryUrl!.TrimEnd('/')}/openai/v1/",
BearerToken = token.Token,
WireApi = "responses",
},
});
AssistantMessageEvent? response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello from Managed Identity!" });
Console.WriteLine(response?.Data.Content);
import asyncio
import os
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient
from copilot.session import PermissionHandler, ProviderConfig
SCOPE = "https://ai.azure.com/.default"
async def main():
# Get a token using Managed Identity, Azure CLI, or other credential chain
credential = DefaultAzureCredential(require_envvar=True)
token = credential.get_token(SCOPE).token
foundry_url = os.environ["FOUNDRY_RESOURCE_URL"]
client = CopilotClient()
await client.start()
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all,
model="gpt-5.5",
provider=ProviderConfig(
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("Hello from Managed Identity!")
print(response.data.content)
await client.stop()
asyncio.run(main())
import { DefaultAzureCredential } from "@azure/identity";
import { CopilotClient } from "@github/copilot-sdk";
const credential = new DefaultAzureCredential({
requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"],
});
const tokenResponse = await credential.getToken(
"https://ai.azure.com/.default"
);
const client = new CopilotClient();
const session = await client.createSession({
model: "gpt-5.5",
provider: {
type: "openai",
baseUrl: `${process.env.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();
Tokenaktualisierung für lang laufende Anwendungen
Bearertoken laufen ab (in der Regel nach ~1 Stunde). Aktualisieren Sie bei Servern oder lang laufenden Agenten das Token vor dem Erstellen jeder Sitzung. Das folgende Python Beispiel veranschaulicht dieses Muster:
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient
from copilot.session import PermissionHandler, ProviderConfig
SCOPE = "https://ai.azure.com/.default"
class ManagedIdentityCopilotAgent:
"""Copilot agent that refreshes Microsoft Entra tokens for Microsoft Foundry."""
def __init__(self, foundry_url: str, model: str = "gpt-5.5"):
self.foundry_url = foundry_url.rstrip("/")
self.model = model
self.credential = DefaultAzureCredential(require_envvar=True)
self.client = CopilotClient()
def _get_provider_config(self) -> ProviderConfig:
"""Build a ProviderConfig with a fresh bearer token."""
token = self.credential.get_token(SCOPE).token
return ProviderConfig(
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
session = await self.client.create_session(
on_permission_request=PermissionHandler.approve_all,
model=self.model,
provider=self._get_provider_config(),
)
response = await session.send_and_wait(prompt)
await session.disconnect()
return response.data.content if response else ""
Umgebungskonfiguration
| Variable | Description | Example |
|---|---|---|
AZURE_TOKEN_CREDENTIALS | Wenn sie in Azure ausgeführt wird, legen Sie sie auf Managed. Wenn es lokal ausgeführt wird, setzen Sie es entweder auf dev oder auf den Anmeldeinformationsnamen eines Entwicklertools, z. B. Azure. | Managed |
FOUNDRY_RESOURCE_ | URL Ihrer Microsoft Foundry-Ressource | https:/ |
Es ist keine API-Schlüsselumgebungsvariable erforderlich – die Authentifizierung wird von DefaultAzureCredential, die automatisch unterstützt:
- Managed Identity (vom System zugewiesen oder vom Benutzer zugewiesen): für 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-Identität: für Kubernetes
Die vollständige Kette der Anmeldeinformationen finden Sie in der DefaultAzureCredential-Dokumentation:
Wann dieses Muster verwenden
| Szenario | Recommendation |
|---|---|
| Von Azure gehostete App mit verwalteter Identität | |
| ✅ Verwenden Sie dieses Muster. | |
| App mit einem vorhandenen Microsoft Entra-Dienstprinzipal | |
| ✅ Verwenden Sie dieses Muster. | |
Lokale Entwicklung mit az login | |
| ✅ Verwenden Sie dieses Muster. | |
| Nicht-Azure-Umgebung mit statischem API-Schlüssel | Verwenden von BYOK (Bring Your Own Key) |
| GitHub Copilot Abonnement verfügbar | Verwenden von Einrichtung von GitHub OAuth |
Siehe auch
- BYOK (Bring Your Own Key): Konfiguration des statischen API-Schlüssels
- Einrichtung von Back-End-Diensten: Serverseitige Bereitstellung
- Azure Identity Documentation