Métodos de autenticação sem chave

Concluído

Na autenticação sem chave no Azure OpenAI para JavaScript, você usa uma identidade gerenciada (para código hospedado no Azure) ou sua identidade de desenvolvedor do Microsoft Entra ID (para desenvolvimento local) para se autenticar, em vez de codificar chaves de API diretamente no código. Isso é feito por meio da classe DefaultAzureCredential ou ManagedIdentityCredential da biblioteca @azure/identity, que fornece uma maneira segura de obter os tokens de acesso bearer necessários para autenticação nos serviços do Azure. Veja como funciona na prática:

  1. Configure o ambiente de Azure. Verifique se o recurso Azure OpenAI foi criado e se sua identidade de desenvolvedor (para desenvolvimento local) ou identidade gerenciada (para código hospedado por Azure) recebe uma função RBAC Azure OpenAI (por exemplo, Usuário openai dos Serviços Cognitivos) no recurso.
  2. Inicializar credenciais. Use a classe DefaultAzureCredential ou a classe ManagedIdentityCredential de @azure/identity para obter um token automaticamente.
  3. Crie a instância do cliente. Instancie AzureOpenAI do pacote openai com endpoint, deployment, apiVersion e o provedor de token retornado por getBearerTokenProvider.
  4. Faça chamadas à API. Use o cliente (por exemplo, client.chat.completions.create) para interagir com Azure OpenAI com segurança, sem lidar com segredos no código.

O exemplo a seguir mostra todas as quatro etapas juntas:

import { AzureOpenAI } from 'openai';
import { getBearerTokenProvider, DefaultAzureCredential } from '@azure/identity';

// Set AZURE_OPENAI_ENDPOINT to the endpoint of your Azure OpenAI resource,
// for example: https://YOUR-RESOURCE-NAME.openai.azure.com/
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
if (!endpoint) {
  throw new Error("Set the AZURE_OPENAI_ENDPOINT environment variable to your Azure OpenAI resource endpoint.");
}
const deployment = '<your Azure OpenAI deployment name>';
const apiVersion = '2024-10-21';

const credential = new DefaultAzureCredential();
const scope = 'https://cognitiveservices.azure.com/.default';
const azureADTokenProvider = getBearerTokenProvider(credential, scope);

// Create an Azure OpenAI client.
const client = new AzureOpenAI({ azureADTokenProvider, endpoint, deployment, apiVersion });

// Call the chat completions API. In the Azure OpenAI client, `model` is the
// name of the deployment, not the underlying model name.
const result = await client.chat.completions.create({
  model: deployment,
  messages: [{ role: 'user', content: 'Say hello!' }],
});

console.log(result.choices[0].message?.content);

Desenvolvimento local versus execução hospedada por Azure

DefaultAzureCredential foi projetado para funcionar tanto em desenvolvimento local quanto em ambientes hospedados no Azure. A credencial tenta usar uma sequência de tipos de credencial até que uma funcione:

  • Desenvolvimento local: Ele pega a identidade do desenvolvedor conectado por meio de credenciais como AzureCliCredential (depois az login) AzurePowerShellCredentiale credenciais de IDE com suporte. A identidade do desenvolvedor deve receber uma função RBAC Azure OpenAI no recurso de destino.
  • ambientes hospedados Azure: quando o mesmo código é executado em recursos como Serviço de Aplicativo do Azure, Azure Functions, Aplicativos de Contêiner do Azure ou Máquinas Virtuais do Azure, DefaultAzureCredential usa ManagedIdentityCredential para obter um token para a identidade gerenciada atribuída para esse recurso. A identidade gerenciada deve receber uma função RBAC Azure OpenAI no recurso de destino.

Para uma identidade gerenciada atribuída pelo usuário, defina a variável de ambiente AZURE_CLIENT_ID (ou passe managedIdentityClientId nas opções de credencial) como a ID de cliente dessa identidade atribuída pelo usuário. Uma identidade gerenciada atribuída pelo sistema não requer uma ID de cliente; em um recurso hospedado no Azure, o new DefaultAzureCredential() sem parâmetros é suficiente.