Métodos de autenticação sem chave
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:
- 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.
- Inicializar credenciais. Use a classe
DefaultAzureCredentialou a classeManagedIdentityCredentialde@azure/identitypara obter um token automaticamente. - Crie a instância do cliente. Instancie
AzureOpenAIdo pacoteopenaicomendpoint,deployment,apiVersione o provedor de token retornado porgetBearerTokenProvider. - 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(depoisaz 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,
DefaultAzureCredentialusaManagedIdentityCredentialpara 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.