En esta guía se muestra cómo usar DefaultAzureCredential desde la biblioteca Azure Identity para autenticarse con modelos de Fundición de IA de Azure a través del SDK de Copilot.
Cómo funciona
El punto de conexión compatible con OpenAI de Fundición de IA de Azure acepta tokens de portador de Entra ID en lugar de claves de API estáticas. El patrón es:
- Uso
DefaultAzureCredentialpara obtener un token para elhttps://cognitiveservices.azure.com/.defaultámbito - Pase el token como
bearer_tokenen la configuración del proveedor BYOK - Actualice el token antes de que expire (los tokens suelen ser válidos durante aproximadamente 1 hora)

ejemplo de Python
Prerequisites
pip install github-copilot-sdk azure-identity
Uso básico
import asyncio
import os
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient
from copilot.session import PermissionHandler, ProviderConfig
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=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())
Actualización de tokens para aplicaciones de ejecución prolongada
Los tokens de portador expiran (normalmente después de aproximadamente 1 hora). En el caso de los servidores o agentes de ejecución prolongada, actualice el token antes de crear cada sesión:
from azure.identity import DefaultAzureCredential
from copilot import CopilotClient
from copilot.session import PermissionHandler, ProviderConfig
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) -> ProviderConfig:
"""Build a ProviderConfig with a fresh bearer token."""
token = self.credential.get_token(COGNITIVE_SERVICES_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 ""
ejemplo de 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();
ejemplo de .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);
Configuración de entorno
| Variable | Description | Example |
|---|---|---|
AZURE_AI_FOUNDRY_RESOURCE_URL | Dirección URL del recurso de Fundición de IA de Azure | https://myresource.openai.azure.com |
No se necesita ninguna variable de entorno de clave de API: la autenticación se controla mediante DefaultAzureCredential, que admite automáticamente:
- Managed Identity (asignada por el sistema o asignada por el usuario): para aplicaciones hospedadas Azure
- CLI de Azure (
az login): para el desarrollo local - Variables de entorno (
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_CLIENT_SECRET): para entidades de servicio - Identidad de carga de trabajo: para Kubernetes
Consulte la documentación de DefaultAzureCredential para obtener la cadena de credenciales completa.
Cuándo usar este patrón
| Escenario | Recomendación |
|---|---|
| Aplicación hospedada en Azure con identidad administrada | |
| ✅ Usa este patrón | |
| Aplicación con una entidad de servicio de Azure AD existente | |
| ✅ Utiliza este patrón | |
Desarrollo local con az login | |
| ✅ Use este patrón | |
| Entorno que no es de Azure con clave de API estática | Use BYOK (bring your own key) |
| GitHub Copilot suscripción disponible | Use Configuración de OAuth de GitHub |
Consulte también
- BYOK (bring your own key): configuración de clave de API estática
- Configuración de servicios back-end: implementación del lado servidor
- Documentación de Azure Identity