Schlüssellose Authentifizierungsmethoden

Abgeschlossen

Bei der schlüssellosen Authentifizierung für Azure OpenAI für JavaScript verwenden Sie eine verwaltete Identität (für Azure gehosteten Code) oder Ihren Entwickler Microsoft Entra ID Identität (für die lokale Entwicklung), um sich anstelle von Hartcodierungs-API-Schlüsseln zu authentifizieren. Dies erfolgt über die DefaultAzureCredential oder ManagedIdentityCredential-Klasse aus der @azure/identity-Bibliothek, die eine sichere Möglichkeit zum Abrufen der Bearertoken bietet, die für die Authentifizierung für Azure Dienste erforderlich sind. So funktioniert es in der Praxis:

  1. Richten Sie die Azure Umgebung ein. Stellen Sie sicher, dass Ihre Azure OpenAI-Ressource erstellt wird und Ihre Entwickleridentität (für lokale Entwicklung) oder verwaltete Identität (für Azure gehosteten Code) eine Azure OpenAI RBAC-Rolle (z. B. Cognitive Services OpenAI User) für die Ressource gewährt wird.
  2. Initialisieren Sie Anmeldeinformationen. Verwenden Sie die DefaultAzureCredential Klasse oder ManagedIdentityCredential Klasse aus @azure/identity , um automatisch ein Token abzurufen.
  3. Erstellen Sie die Clientinstanz. Instanziieren Sie AzureOpenAI aus dem Paket openai mit endpoint, deployment, apiVersion und dem von getBearerTokenProvider zurückgegebenen Tokenanbieter.
  4. Führen Sie API-Aufrufe durch. Verwenden Sie den Client (z. B. client.chat.completions.create), um sicher mit Azure OpenAI zu interagieren, ohne geheime Schlüssel im Code zu verarbeiten.

Das folgende Beispiel zeigt alle vier Schritte zusammen:

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);

Lokale Entwicklung im Vergleich zur Azure gehosteten Ausführung

DefaultAzureCredential ist für die Arbeit in lokalen Entwicklungs- und Azure gehosteten Umgebungen konzipiert. Die Anmeldeinformation probiert eine Kette von Anmeldeinformationstypen aus, bis einer davon erfolgreich ist:

  • Lokale Entwicklung: Er erfasst die angemeldete Entwickleridentität über Anmeldeinformationen wie AzureCliCredential (nach az login), AzurePowerShellCredentialund unterstützte IDE-Anmeldeinformationen. Der Entwickleridentität muss für die Zielressource eine Azure OpenAI RBAC-Rolle zugewiesen werden.
  • Azure-hosted environments: Wenn derselbe Code auf Ressourcen wie Azure App Service, Azure Functions, Azure Container Apps oder Azure Virtual Machines ausgeführt wird, DefaultAzureCredential verwendet ManagedIdentityCredential, um ein Token für die verwaltete Identität abzurufen, die dieser Ressource zugewiesen ist. Der verwalteten Identität muss eine Azure OpenAI RBAC-Rolle für die Zielressource gewährt werden.

Legen Sie für eine benutzerzugewiesene verwaltete Identität die Umgebungsvariable AZURE_CLIENT_ID auf die Client-ID dieser benutzerzugewiesenen Identität fest (oder übergeben Sie managedIdentityClientId in den Anmeldeoptionsdaten). Für eine vom System zugewiesene verwaltete Identität ist keine Client-ID erforderlich. bei einer Azure gehosteten Ressource reicht die parameterlose new DefaultAzureCredential() aus.