Métodos de autenticação sem chave

Concluído

Na autenticação sem chave para Azure OpenAI para JavaScript, utiliza-se uma identidade gerida (para código alojado no Azure) ou a identidade do Microsoft Entra ID do seu programador (para desenvolvimento local) para autenticar em vez de codificar diretamente as chaves API. Isto é feito através da classe DefaultAzureCredential ou ManagedIdentityCredential da biblioteca @azure/identity, que fornece uma forma segura de obter os tokens portadores necessários para autenticação em serviços Azure. Veja como funciona na prática:

  1. Configura o ambiente Azure. Assegure que o seu recurso OpenAI Azure é criado e que a sua identidade de programador (para desenvolvimento local) ou identidade gerida (para código alojado em Azure) recebe um papel Azure OpenAI RBAC (por exemplo, Cognitive Services OpenAI User) no recurso.
  2. Inicializar credenciais. Use a classe DefaultAzureCredential ou a classe ManagedIdentityCredential de @azure/identity para obter automaticamente um token.
  3. Crie a instância do cliente. Instancie AzureOpenAI a partir do pacote openai com endpoint, deployment, apiVersion e o fornecedor do token devolvido por getBearerTokenProvider.
  4. Faça chamadas API. Use o cliente (por exemplo, client.chat.completions.create) para interagir com Azure OpenAI de forma segura, sem lidar com segredos no código.

O exemplo seguinte mostra os quatro passos em conjunto:

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 no Azure

DefaultAzureCredential foi concebido para funcionar tanto em ambientes de desenvolvimento local como em ambientes Azure alojados. A credencial tenta uma cadeia de tipos de credenciais até que uma tenha sucesso:

  • Desenvolvimento local: Ele capta a identidade do programador iniciado através de credenciais como AzureCliCredential (após az login), AzurePowerShellCredential, e credenciais do IDE suportadas. A identidade de programador deve ter atribuída uma função RBAC do Azure OpenAI no recurso de destino.
  • Ambientes alojados no Azure: Quando o mesmo código é executado em recursos como o Serviço de Aplicações do Azure, o Funções do Azure, o Azure Container Apps ou as Máquinas Virtuais do Azure, DefaultAzureCredential utiliza ManagedIdentityCredential para obter um token da identidade gerida atribuída a esse recurso. Deve ser atribuída à identidade gerida uma função RBAC do Azure OpenAI no recurso de destino.

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