Metodi di autenticazione senza chiave
Nell'autenticazione senza chiave ad Azure OpenAI per JavaScript, si usa un'identità gestita (per il codice ospitato in Azure) oppure l'identità Microsoft Entra ID dello sviluppatore (per lo sviluppo locale) per autenticarsi, anziché codificare le chiavi API nel codice. Questa operazione viene eseguita tramite la classe DefaultAzureCredential o ManagedIdentityCredential dalla libreria @azure/identity, che fornisce un modo sicuro per ottenere i token di connessione necessari per l'autenticazione ai servizi di Azure. Ecco come funziona in pratica:
- Configurare l'ambiente Azure. Assicuratevi che la risorsa Azure OpenAI sia stata creata e che all'identità dello sviluppatore (per lo sviluppo locale) o all'identità gestita (per il codice ospitato in Azure) sia assegnato un ruolo RBAC di Azure OpenAI (ad esempio, Cognitive Services OpenAI User) per la risorsa.
- Inizializza le credenziali. Usare la classe
DefaultAzureCredentialo la classeManagedIdentityCredentialdi@azure/identityper ottenere automaticamente un token. - Crea l'istanza del client. Crea un'istanza di
AzureOpenAIdal pacchettoopenaiconendpoint,deployment,apiVersione il provider di token restituito dagetBearerTokenProvider. - Effettuare chiamate API. Usare il client (ad esempio,
client.chat.completions.create) per interagire con Azure OpenAI in modo sicuro, senza gestire i segreti nel codice.
L'esempio seguente illustra tutti e quattro i passaggi:
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);
Sviluppo locale rispetto all'esecuzione ospitata da Azure
DefaultAzureCredential è progettato per funzionare sia negli ambienti di sviluppo locale che in ambienti ospitati Azure. La credenziale prova una sequenza di tipi di credenziali finché una non va a buon fine:
-
Sviluppo locale: Raccoglie l'identità dello sviluppatore connesso tramite credenziali come
AzureCliCredential(dopoaz login),AzurePowerShellCredentiale le credenziali dell'IDE supportate. All'identità dello sviluppatore deve essere assegnato un ruolo RBAC di Azure OpenAI nella risorsa di destinazione. -
Azure-hosted environments: Quando lo stesso codice viene eseguito su risorse quali Servizio app di Azure, Funzioni di Azure, App contenitore di Azure o Macchine virtuali di Azure,
DefaultAzureCredentialusaManagedIdentityCredentialper ottenere un token per l'identità gestita assegnata a tale risorsa. All'identità gestita deve essere assegnato un ruolo RBAC di Azure OpenAI sulla risorsa di destinazione.
Per un'identità gestita assegnata dall'utente, impostare la variabile di ambiente AZURE_CLIENT_ID sull'ID client di tale identità assegnata dall'utente (oppure passare managedIdentityClientId nelle opzioni della credenziale). Un'identità gestita assegnata dal sistema non richiede un ID client; in una risorsa ospitata Azure, l'new DefaultAzureCredential() senza parametri è sufficiente.