無金鑰驗證方法

已完成

在 Azure OpenAI for JavaScript 的無金鑰認證中,你會使用管理身份(用於 Azure 託管程式碼)或開發者的 Microsoft Entra ID 身份(用於本地開發)來驗證,而不是硬編碼 API 金鑰。 這是透過 DefaultAzureCredential 函式庫中的 ManagedIdentityCredential 或 @azure/identity 類別來完成,該類別提供一種安全的方式來取得認證Azure服務所需的承載憑證。 以下是其實際運作方式:

  1. 設定 Azure 環境。 確保你的 Azure OpenAI 資源已經建立,且你的開發者身份(用於本地開發)或管理身份(用於Azure託管程式碼)被賦予資源上的 Azure OpenAI RBAC 角色(例如,Cognitive Services OpenAI User)。
  2. 初始化憑證。 使用來自 DefaultAzureCredential 的 ManagedIdentityCredential 類別或 @azure/identity 類別,自動取得權杖。
  3. 建立客戶端實例。 使用 AzureOpenAI 套件中的 openai 進行實例化,並傳入 endpoint、deployment、apiVersion,以及由 getBearerTokenProvider 傳回的權杖提供者。
  4. 呼叫 API。 使用用戶端(例如 client.chat.completions.create)即可安全地與 Azure OpenAI 互動,而無需在程式碼中處理密鑰。

以下範例將四個步驟一起呈現:

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

本地開發與託管於 Azure 的執行

DefaultAzureCredential 設計用於本地開發與Azure託管環境。 憑證會嘗試一連串的憑證類型,直到成功:

  • 本機開發: 它會透過 AzureCliCredential(在 az login 之後)、AzurePowerShellCredential 以及支援的 IDE 認證等認證資訊,取得已登入的開發人員身分。 開發者身份必須在目標資源上被賦予 Azure OpenAI RBAC 角色。
  • Azure 託管環境: 當相同程式碼執行於 Azure App 服務、Azure Functions、Azure 容器應用程式 或 Azure 虛擬機器 等資源時, DefaultAzureCredential 使用 ManagedIdentityCredential 來取得該資源所指派的管理身份的權杖。 受管理身份必須在目標資源上被授予 Azure OpenAI RBAC 角色。

對於使用者指派的受控識別,請將 AZURE_CLIENT_ID 環境變數設為該使用者指派受控識別的用戶端 ID(或在認證選項中傳遞 managedIdentityClientId)。 系統指派的管理身份不需要用戶端 ID;在Azure託管資源中,無參數的 new DefaultAzureCredential() 就足夠了。