Méthodes d’authentification sans clé
Dans l’authentification sans clé pour Azure OpenAI pour JavaScript, vous utilisez une identité managée (pour le code hébergé par Azure) ou votre identité Microsoft Entra ID développeur (pour le développement local) pour vous authentifier au lieu de coder en dur les clés d’API. Cette opération est effectuée grâce à la classe DefaultAzureCredential ou ManagedIdentityCredential de la bibliothèque @azure/identity, qui fournit un moyen sécurisé d’obtenir les jetons du porteur nécessaires pour s’authentifier auprès des services Azure. Voici comment cela fonctionne dans la pratique :
- Configurez l’environnement Azure. Vérifiez que votre ressource OpenAI Azure est créée et que votre identité de développeur (pour le développement local) ou l’identité managée (pour le code hébergé par Azure) est accordée à un rôle RBAC OpenAI Azure (par exemple, Utilisateur OpenAI De Cognitive Services) sur la ressource.
- Initialisez les informations d’identification. Utilisez la classe
DefaultAzureCredentialou la classeManagedIdentityCredentialde@azure/identitypour obtenir automatiquement un jeton. - Créez l’instance du client. Créez une instance de
AzureOpenAIà partir du packageopenaiavecendpoint,deployment,apiVersionet le fournisseur de jetons renvoyé pargetBearerTokenProvider. - Effectuez des appels d’API. Utilisez le client (par exemple
client.chat.completions.create) pour interagir avec Azure OpenAI en toute sécurité, sans gérer les secrets dans le code.
L’exemple suivant montre les quatre étapes suivantes :
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);
Développement local et exécution hébergée par Azure
DefaultAzureCredential est conçu pour fonctionner dans des environnements de développement locaux et des environnements hébergés sur Azure. Les informations d’identification essaient successivement une chaîne de types d’informations d’identification jusqu’à ce que l’un d’eux réussisse :
-
Développement local : Il récupère l’identité du développeur connecté par le biais d’informations d’identification telles que
AzureCliCredential(aprèsaz login),AzurePowerShellCredentialet les informations d’identification IDE prises en charge. L’identité du développeur doit se voir attribuer un rôle RBAC Azure OpenAI sur la ressource cible. -
environnements hébergés Azure : lorsque le même code s’exécute sur des ressources telles que Azure App Service, Azure Functions, Azure Container Apps ou Machines virtuelles Azure,
DefaultAzureCredentialutiliseManagedIdentityCredentialpour obtenir un jeton pour l’identité managée affectée à cette ressource. L’identité managée doit se voir attribuer un rôle RBAC Azure OpenAI sur la ressource cible.
Pour une identité managée attribuée par l’utilisateur, définissez la variable d’environnement AZURE_CLIENT_ID sur l’ID client de cette identité attribuée par l’utilisateur (ou transmettez managedIdentityClientId dans les options d’informations d’identification). Une identité managée attribuée par le système ne nécessite pas d’ID client ; sur une ressource hébergée sur Azure, la forme new DefaultAzureCredential() sans paramètre suffit.