Métodos de autenticação sem chave
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:
- 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.
- Inicializar credenciais. Use a classe
DefaultAzureCredentialou a classeManagedIdentityCredentialde@azure/identitypara obter automaticamente um token. - Crie a instância do cliente. Instancie
AzureOpenAIa partir do pacoteopenaicomendpoint,deployment,apiVersione o fornecedor do token devolvido porgetBearerTokenProvider. - 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ósaz 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,
DefaultAzureCredentialutilizaManagedIdentityCredentialpara 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.