Como autenticar aplicativos JavaScript nos serviços do Azure usando o SDK do Azure para JavaScript

Quando um aplicativo precisa acessar um recurso do Azure (como Armazenamento, Cofre de Chaves ou Serviços Cognitivos), o aplicativo deve ser autenticado no Azure. Isso é verdade para todos os aplicativos, sejam eles implantados no Azure, implantados no local ou em desenvolvimento em uma estação de trabalho de desenvolvedor local. Este artigo descreve as abordagens recomendadas para autenticar um aplicativo no Azure ao usar o SDK do Azure para JavaScript.

O processo recomendado é fazer com que seus aplicativos usem autenticação baseada em token, em vez de cadeias de conexão ou chaves, ao autenticar em recursos do Azure. O SDK do Azure fornece autenticação baseada em token e permite que os aplicativos se autentiquem diretamente nos recursos do Azure, quer o aplicativo esteja em desenvolvimento local, implantado no Azure ou implantado em um servidor local.

O tipo específico de autenticação baseada em token que um aplicativo deve usar para autenticar nos recursos do Azure depende de onde o aplicativo está sendo executado e é mostrado no diagrama a seguir.

Environment Autenticação
Locais Quando um desenvolvedor está executando um aplicativo durante o desenvolvimento local - O aplicativo pode se autenticar no Azure usando uma entidade de serviço de aplicativo para desenvolvimento local ou usando as credenciais do Azure do desenvolvedor. Cada uma dessas opções é discutida com mais detalhes na seção autenticação durante o desenvolvimento local.
Azure Quando um aplicativo é hospedado no Azure - O aplicativo deve se autenticar nos recursos do Azure usando uma identidade gerenciada. Essa opção é discutida com mais detalhes abaixo na seção autenticação em ambientes de servidor.
No local Quando um aplicativo é hospedado e implantado localmente - O aplicativo deve se autenticar nos recursos do Azure usando uma entidade de serviço de aplicativo. Essa opção é discutida com mais detalhes abaixo na seção autenticação em ambientes de servidor.

Um diagrama mostrando as estratégias de autenticação baseadas em tokens recomendadas para um aplicativo, dependendo de onde ele está sendo executado.

Vantagens da autenticação baseada em tokens

Ao criar aplicativos para o Azure, a autenticação baseada em token é altamente recomendada sobre segredos (cadeias de conexão ou chaves). A autenticação baseada em token é fornecida com DefaultAzureCredential.

Autenticação baseada em tokens Segredos (cadeias de conexão e chaves)
Princípio do menor privilégio, estabeleça as permissões específicas necessárias para o aplicativo no recurso do Azure. Uma cadeia de conexão ou chave concede direitos completos ao recurso do Azure.
Não há nenhum segredo de aplicativo para armazenar. Deve armazenar e girar segredos na configuração do aplicativo ou na variável de ambiente.
O SDK do Azure Identity gerencia tokens para você nos bastidores. Isso torna o uso da autenticação baseada em token tão fácil de usar quanto uma cadeia de conexão. Os segredos não são geridos.

O uso de cadeias de conexão deve ser limitado a aplicativos de prova de conceito iniciais ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, as classes de autenticação baseada em token disponíveis no SDK do Azure devem sempre ser preferidas ao autenticar nos recursos do Azure.

Use o seguinte SDK:

DefaultAzureCredential

O método DefaultAzureCredential do SDK do Azure permite que os aplicativos usem métodos de autenticação diferentes, dependendo do ambiente em que são executados. Isso permite que os aplicativos sejam implantados em ambientes locais, de teste e de produção sem alterações de código. Você configura o método de autenticação apropriado para cada ambiente e DefaultAzureCredential deteta e usa automaticamente esse método de autenticação. O uso de é preferível à codificação manual de lógica condicional ou sinalizadores de recursos para usar diferentes métodos de DefaultAzureCredential autenticação em ambientes diferentes.

Os detalhes sobre como usar a classe DefaultAzureCredential são abordados posteriormente neste artigo na seção Usar DefaultAzureCredential em um aplicativo.

Autenticação em ambientes de servidor

Ao hospedar em um ambiente de servidor, cada aplicativo deve receber uma identidade de aplicativo exclusiva por ambiente. No Azure, uma identidade de aplicativo é representada por uma entidade de serviço, um tipo especial de entidade de segurança destinada a identificar e autenticar aplicativos no Azure. O tipo de entidade de serviço a ser usada para seu aplicativo depende de onde ele está sendo executado.

Autenticação durante o desenvolvimento local

Quando um aplicativo é executado na estação de trabalho de um desenvolvedor durante o desenvolvimento local, o ambiente local ainda deve se autenticar em todos os serviços do Azure usados pelo aplicativo.

Usar DefaultAzureCredential em um aplicativo

Para usar DefaultAzureCredential em um aplicativo JavaScript, adicione o pacote @azure/identity ao seu aplicativo.

npm install @azure/identity

Em seguida, o exemplo de código a seguir mostra como instanciar um DefaultAzureCredential objeto e usá-lo com uma classe de cliente do SDK do Azure, neste caso um BlobServiceClient usado para acessar o armazenamento de Blob.

// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  new DefaultAzureCredential()
);

DefaultAzureCredential detetará automaticamente o mecanismo de autenticação configurado para o aplicativo e obterá os tokens necessários para autenticar o aplicativo no Azure. Se um aplicativo fizer uso de mais de um cliente SDK, o mesmo objeto de credencial poderá ser usado com cada objeto cliente SDK.

Sequência de seleção de métodos de autenticação ao usar DefaultAzureCredential

Internamente, DefaultAzureCredential implementa uma cadeia de seleção de provedores de credenciais para autenticar aplicativos em recursos do Azure. Cada provedor de credenciais é capaz de detetar se credenciais desse tipo estão configuradas para o aplicativo. DefaultAzureCredential Verifica sequencialmente cada provedor em ordem e usa as credenciais do primeiro provedor que tem credenciais configuradas.

Se você tiver mais de uma credencial configurada, a ordem de localização da credencial através da cadeia é importante.

A ordem em que DefaultAzureCredential procura credenciais para JavaScript é mostrada no diagrama e na tabela abaixo.

Um diagrama mostrando a sequência na qual DefaultAzureCredential verifica qual fonte de autenticação está configurada para um aplicativo.

Existem dois caminhos:

  • Serviço implantado (Azure ou local): a sequência começa com as variáveis de ambiente, depois a identidade gerenciada e, em seguida, o restante dos locais para uma credencial (Visual Studio Code, CLI do Azure, Azure PowerShell).
  • Ambiente local do desenvolvedor: a cadeia de trabalho do desenvolvedor local começa com o usuário do Azure conectado ao Visual Studio Code, mostrado na barra inferior do IDE, depois passa para a CLI do Azure e, em seguida, para o Azure PowerShell. É importante entender se você configurou suas variáveis de ambiente local, seja para todo o seu ambiente ou para o ambiente virtual de um projeto (como com DOTENV), essas variáveis substituirão a cadeia do Visual Studio Code -> Azure CLI -> PowerShell porque são a primeira credencial verificada na cadeia.
Tipo de credencial Description
Ambiente DefaultAzureCredential lê um conjunto de variáveis de ambiente para determinar se uma entidade de serviço de aplicativo (usuário do aplicativo) foi definida para o aplicativo. Em caso afirmativo, DefaultAzureCredential usa esses valores para autenticar o aplicativo no Azure.

Este método é mais frequentemente usado em ambientes de servidor, mas também pode ser usado ao desenvolver localmente.
Identidade Gerida Se o aplicativo for implantado em um host do Azure com a Identidade Gerenciada habilitada, DefaultAzureCredential autenticará o aplicativo no Azure usando essa Identidade Gerenciada. A autenticação usando uma identidade gerenciada é discutida na seção Autenticação em ambientes de servidor deste documento.

Esse método só está disponível quando um aplicativo é hospedado no Azure usando um serviço habilitado para identidade gerenciada.
Visual Studio Code Se o desenvolvedor tiver se autenticado no Azure usando o plug-in da Conta do Azure do Visual Studio Code, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta.
CLI do Azure Se um desenvolvedor tiver se autenticado no Azure usando o az login comando na CLI do Azure, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta.
Azure PowerShell Se um desenvolvedor tiver se autenticado no Azure usando o Connect-AzAccount cmdlet do Azure PowerShell, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta.
Interativo Se habilitado, DefaultAzureCredential autenticará interativamente o desenvolvedor por meio do navegador padrão do sistema atual. Por padrão, essa opção está desativada.