Métodos de autenticación sin claves
En la autenticación sin claves para Azure OpenAI para JavaScript, se usa una identidad administrada (para código hospedado Azure) o la identidad del desarrollador Microsoft Entra ID (para el desarrollo local) para autenticarse en lugar de codificar claves de API de codificación rígida. Esto se realiza a través de la clase DefaultAzureCredential o ManagedIdentityCredential de la biblioteca @azure/identity, que proporciona una forma segura de obtener los tokens de portador necesarios para autenticarse en los servicios de Azure. Así es como funciona en la práctica:
- Configure el entorno de Azure. Asegúrese de que el recurso de Azure OpenAI se haya creado y de que a su identidad de desarrollador (para el desarrollo local) o a la identidad administrada (para el código hospedado en Azure) se le haya asignado un rol RBAC de Azure OpenAI (por ejemplo, Cognitive Services OpenAI User) en el recurso.
- Inicialice las credenciales. Use la clase
DefaultAzureCredentialo la claseManagedIdentityCredentialde@azure/identitypara obtener un token automáticamente. - Cree la instancia de cliente. Cree una instancia de
AzureOpenAIdel paqueteopenaiconendpoint,deployment,apiVersiony el proveedor de tokens devuelto porgetBearerTokenProvider. - Realice llamadas API. Use el cliente (por ejemplo,
client.chat.completions.create) para interactuar con Azure OpenAI de forma segura, sin controlar secretos en el código.
En el ejemplo siguiente se muestran los cuatro pasos juntos:
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);
Desarrollo local frente a ejecución hospedada Azure
DefaultAzureCredential está diseñado para funcionar tanto en entornos de desarrollo local como en entornos alojados en Azure. La credencial prueba una secuencia de tipos de credencial hasta que uno funciona correctamente:
-
Desarrollo local: Recoge la identidad del desarrollador que ha iniciado sesión a través de credenciales como
AzureCliCredential(despuésaz loginde ),AzurePowerShellCredentialy las credenciales del IDE compatibles. La identidad del desarrollador debe tener asignado un rol RBAC de Azure OpenAI en el recurso de destino. -
Azure entornos hospedados: Cuando el mismo código se ejecuta en recursos como Azure App Service, Azure Functions, Azure Container Apps o Azure Virtual Machines,
DefaultAzureCredentialusaManagedIdentityCredentialpara obtener un token para la identidad administrada asignada a ese recurso. A la identidad administrada se le debe conceder un rol RBAC de Azure OpenAI en el recurso de destino.
Para una identidad administrada asignada por el usuario, establezca la variable de entorno AZURE_CLIENT_ID con el identificador de cliente de esa identidad asignada por el usuario (o pase managedIdentityClientId en las opciones de credenciales). Una identidad administrada asignada por el sistema no requiere un identificador de cliente; en un recurso hospedado en Azure, basta con new DefaultAzureCredential() sin parámetros.