Skip to main content

Azure verwaltete Identität mit BYOK

Das BYOK (Bring Your Own Key) des Copilot SDK akzeptiert statische API-Schlüssel, aber Azure Bereitstellungen verwenden häufig verwaltete Identität (Microsoft Entra ID) anstelle von langlebigen Schlüsseln. Da das SDK Microsoft Entra Authentifizierung nicht nativ unterstützt, können Sie über das bearer_token Anbieterkonfigurationsfeld ein kurzlebiges Bearertoken verwenden.

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:

  1. Verwenden Sie DefaultAzureCredential, um ein Token für den Bereich https://ai.azure.com/.default zu erhalten
  2. Übergeben Sie das Token als bearer_token in der BYOK-Provider-Konfiguration
  3. Aktualisieren Sie das Token, bevor es abläuft (Token sind in der Regel für ~1 Stunde gültig)

Diagramm: Sequenzdiagramm mit dem beschriebenen Prozess.

Codebeispiele

Voraussetzungen

Installieren Sie die Azure Identity- und Copilot SDK-Pakete für Ihre Sprache:

Codesprachen navigation

.NET
dotnet add package GitHub.Copilot.SDK
dotnet add package Azure.Core

Grundlegende Nutzung

Rufen Sie mit DefaultAzureCredential ein Token ab und übergeben Sie es als Bearer-Token in Ihrer Anbieterkonfiguration:

Codesprachen navigation

.NET
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);

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

VariableDescriptionExample
AZURE_TOKEN_CREDENTIALSWenn sie in Azure ausgeführt wird, legen Sie sie auf ManagedIdentityCredential. Wenn es lokal ausgeführt wird, setzen Sie es entweder auf dev oder auf den Anmeldeinformationsnamen eines Entwicklertools, z. B. AzureCliCredential.ManagedIdentityCredential
FOUNDRY_RESOURCE_URLURL Ihrer Microsoft Foundry-Ressourcehttps://<my-resource>.openai.azure.com

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

SzenarioRecommendation
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üsselVerwenden von BYOK (Bring Your Own Key)
GitHub Copilot Abonnement verfügbarVerwenden von Einrichtung von GitHub OAuth

Siehe auch