Metody uwierzytelniania bez klucza

Ukończone

W przypadku uwierzytelniania bez użycia kluczy w usłudze Azure OpenAI dla języka JavaScript należy użyć tożsamości zarządzanej (w przypadku kodu hostowanego na platformie Azure) lub tożsamości dewelopera Microsoft Entra ID (podczas programowania lokalnego) do uwierzytelniania zamiast umieszczać klucze interfejsu API bezpośrednio w kodzie. Odbywa się to za pośrednictwem klasy DefaultAzureCredential lub ManagedIdentityCredential z biblioteki @azure/identity, która udostępnia bezpieczny sposób uzyskiwania tokenów okaziciela wymaganych na potrzeby uwierzytelniania w usługach Azure. Oto jak działa w praktyce:

  1. Skonfiguruj środowisko Azure. Upewnij się, że zasób Azure OpenAI został utworzony oraz że tożsamości dewelopera (na potrzeby programowania lokalnego) lub tożsamości zarządzanej (w przypadku kodu hostowanego na platformie Azure) przypisano dla tego zasobu rolę RBAC usługi Azure OpenAI (na przykład Cognitive Services OpenAI User).
  2. Inicjowanie poświadczeń. Użyj klasy DefaultAzureCredential lub ManagedIdentityCredential z @azure/identity, aby automatycznie uzyskać token.
  3. Utwórz instancję klienta. Utwórz instancję AzureOpenAI z pakietu openai przy użyciu endpoint, deployment, apiVersion oraz dostawcy tokenu zwróconego przez getBearerTokenProvider.
  4. Wykonaj wywołania interfejsu API. Użyj klienta (na przykład client.chat.completions.create), aby bezpiecznie komunikować się z usługą Azure OpenAI bez konieczności obsługi kluczy tajnych w kodzie.

Poniższy przykład przedstawia wszystkie cztery kroki razem:

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

Programowanie lokalne a wykonywanie hostowane Azure

DefaultAzureCredential jest przeznaczony do pracy zarówno w lokalnych środowiskach programistycznych, jak i w środowiskach hostowanych na platformie Azure. Mechanizm uwierzytelniania wypróbowuje łańcuch typów poświadczeń, aż jeden z nich zakończy się powodzeniem:

  • Programowanie w środowisku lokalnym: Pobiera tożsamość zalogowanego dewelopera za pomocą poświadczeń, takich jak AzureCliCredential (po az login), AzurePowerShellCredential i poświadczenia obsługiwanych środowisk IDE. Tożsamość dewelopera musi mieć nadaną rolę RBAC usługi Azure OpenAI dla zasobu docelowego.
  • Środowiska hostowane na platformie Azure: Gdy ten sam kod jest uruchamiany w zasobach, takich jak Azure App Service, Azure Functions, Azure Container Apps lub Azure Virtual Machines, DefaultAzureCredential używa elementu ManagedIdentityCredential, aby uzyskać token dla tożsamości zarządzanej przypisanej do tego zasobu. Tożsamość zarządzana musi otrzymać rolę RBAC usługi Azure OpenAI przypisaną do zasobu docelowego.

W przypadku tożsamości zarządzanej przypisanej przez użytkownika ustaw zmienną środowiskową AZURE_CLIENT_ID (lub przekaż managedIdentityClientId w opcjach poświadczeń) na identyfikator klienta tej tożsamości przypisanej przez użytkownika. Tożsamość zarządzana przypisana przez system nie wymaga identyfikatora klienta; w zasobie hostowanym na platformie Azure wystarczy parametr bez argumentów new DefaultAzureCredential().