Skip to main content
Select language: current language is German
Suchen oder Fragen an Copilot stellen
Menü öffnen

Verwenden von Azure Managed Identity mit Copilot SDK

Verwenden Sie Azure Managed Identity (Entra-ID) zum Authentifizieren GitHub Copilot SDK mit Azure AI Foundry-Modellen anstelle statischer API-Schlüssel.

Wer kann dieses Feature verwenden?

GitHub Copilot SDK ist mit allen Copilot Tarifen verfügbar.

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:

  1. Verwenden Sie DefaultAzureCredential, um ein Token für den https://cognitiveservices.azure.com/.default Geltungsbereich zu erhalten.
  2. Übergeben Sie das Token mithilfe des Bearertokenfelds in der BYOK-Anbieterkonfiguration (bearer_token in Python, bearerToken in Node.js / TypeScript und .NET).
  3. Aktualisieren Sie das Token, bevor es abläuft. Token sind in der Regel für etwa eine Stunde gültig.

Diagramm mit dem Authentifizierungsfluss für Azure Managed Identity mit dem Copilot SDK.

Voraussetzungen

  • Ein Azure-Abonnement mit einer implementierten Azure AI Foundry-Ressource.
  • Die Azure Identity-Bibliothek installiert (azure-identity für Python, @azure/identity für Node.jsoder Azure.Identity fü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:

VariableBeschreibungBeispiel
AZURE_AI_FOUNDRY_RESOURCE_URLIhre Azure AI Foundry-Ressourcen-URLhttps://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

SzenarioEmpfehlung
Von Azure gehostete App mit verwalteter IdentitätVerwenden Sie dieses Muster.
App mit vorhandenem Azure AD DienstprinzipalVerwenden Sie dieses Muster.
Lokale Entwicklung mit az loginVerwenden Sie dieses Muster.
Nicht-Azure-Umgebung mit statischem API-SchlüsselVerwenden 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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.