Metodi di autenticazione senza chiave

Completato

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:

  1. 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.
  2. Inizializza le credenziali. Usare la classe DefaultAzureCredential o la classe ManagedIdentityCredential di @azure/identity per ottenere automaticamente un token.
  3. Crea l'istanza del client. Crea un'istanza di AzureOpenAI dal pacchetto openai con endpoint, deployment, apiVersion e il provider di token restituito da getBearerTokenProvider.
  4. 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 (dopo az 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, DefaultAzureCredential usa ManagedIdentityCredential per 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.