Skip to main content

Identidade gerenciada do Azure com BYOK

O BYOK (Bring Your Own Key - traga sua própria chave) do SDK do Copilot aceita chaves de API estáticas, mas as implantações Azure geralmente usam Identidade Gerenciada (Microsoft Entra ID) em vez de chaves de longa duração. Como o SDK não dá suporte nativo à autenticação Microsoft Entra, você pode usar um token de portador de curta duração por meio do campo de configuração do bearer_token provedor.

Este guia mostra como usar a API DefaultAzureCredential do SDK Azure Identity para se autenticar em modelos do Microsoft Foundry por meio do Copilot SDK.

Como funciona

O ponto de extremidade compatível com OpenAI do Microsoft Foundry aceita tokens Bearer do Microsoft Entra ID em vez de chaves de API estáticas. O padrão é:

  1. Usar DefaultAzureCredential para obter um token no escopo https://ai.azure.com/.default
  2. Passe o token como bearer_token na configuração do provedor BYOK
  3. Atualize o token antes de expirar (os tokens normalmente são válidos por aproximadamente 1 hora)

Diagrama: diagrama de sequência mostrando o processo descrito.

Exemplos de código

Pré-requisitos

Instale os pacotes do SDK do Azure Identity e Copilot para seu idioma:

Idiomas de código navigation

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

Uso Básico

Obtenha um token usando DefaultAzureCredential e passe-o como o token de portador na configuração do provedor:

Idiomas de código 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);

Atualização de token para aplicativos de execução prolongada

Os tokens de portador expiram (normalmente após cerca de 1 hora). Para servidores ou agentes de execução longa, atualize o token antes de criar cada sessão. O exemplo de Python a seguir demonstra esse padrão:

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 ""

Configuração do ambiente

VariableDescriptionExample
AZURE_TOKEN_CREDENTIALSAo executar em Azure, defina-o como ManagedIdentityCredential. Ao executar localmente, configure-o para usar dev ou um nome de credencial de ferramenta de desenvolvedor, como AzureCliCredential.ManagedIdentityCredential
FOUNDRY_RESOURCE_URLA URL do recurso Microsoft Foundryhttps://<my-resource>.openai.azure.com

Nenhuma variável de ambiente de chave de API é necessária– a autenticação é tratada por DefaultAzureCredential, que dá suporte automaticamente a:

  • Managed Identity (atribuído pelo sistema ou atribuído pelo usuário): para aplicativos hospedados Azure
  • CLI do Azure (az login): para desenvolvimento local
  • Variáveis de ambiente (AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET): para entidades de serviço
  • Identidade da carga de trabalho: para Kubernetes

Consulte a documentação em DefaultAzureCredential para ver a cadeia completa de credenciais:

Quando usar esse padrão

ScenarioRecomendação
Aplicativo hospedado no Azure com Identidade Gerenciada
✅ Usar esse padrão
Aplicativo com entidade de serviço Microsoft Entra existente
✅ Usar esse padrão
Desenvolvimento local com az login
✅ Usar esse padrão
Ambiente não Azure com chave de API estáticaUsar BYOK (Bring Your Own Key - traga sua própria chave)
GitHub Copilot assinatura disponívelUsar Configuração do OAuth do GitHub

Consulte também