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 vale para todos os aplicativos, independentemente de serem implantados no Azure, localmente 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.
Abordagem de autenticação de aplicativo recomendada
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 perfeitamente nos recursos do Azure, independentemente de o aplicativo estar 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.
Ambiente | Autenticação |
---|---|
Local | 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 mais detalhadamente 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 mais detalhadamente 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 mais detalhadamente abaixo na seção autenticação em ambientes de servidor. |
Vantagens da autenticação baseada em token
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 token | Segredos (cadeias de conexão e chaves) |
---|---|
Princípio de privilégio mínimo, 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 totais ao recurso do Azure. |
Não há segredo de aplicativo para armazenar. | Deve armazenar e girar segredos na configuração do aplicativo ou na variável de ambiente. |
O SDK de Identidade do Azure 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. | Segredos não são gerenciados. |
O uso de cadeias de conexão deve ser limitado à prova inicial de aplicativos conceituais ou protótipos de desenvolvimento que não acessam dados confidenciais ou de produção. Caso contrário, as classes de autenticação baseadas em token disponíveis no SDK do Azure devem ser sempre preferenciais ao autenticar 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 detecta DefaultAzureCredential
e usa automaticamente esse método de autenticação. O uso de é preferível à codificação manual de lógica condicional ou sinalizadores de recurso para usar métodos de DefaultAzureCredential
autenticação diferentes 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 seu aplicativo está em execução.
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 qualquer serviço do Azure usado 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 Blobs.
// 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
detectará 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 detectar se as 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.
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 de uma credencial (Visual Studio Code, CLI do Azure, Azure PowerShell).
- Ambiente local do desenvolvedor: a cadeia da estação de trabalho do desenvolvedor local começa com o usuário do Azure conectado do 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 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 elas são a primeira credencial verificada na cadeia.
Tipo de credencial | Descrição |
---|---|
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. Nesse caso, DefaultAzureCredential usa esses valores para autenticar o aplicativo no Azure.Esse método geralmente é usado em ambientes de servidor, mas também pode ser usado ao desenvolver localmente. |
Identidade Gerenciada | Se o aplicativo for implantado em um host do Azure com 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 autenticado no Azure usando o Visual Studio Code plug-in da Conta do Azure, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta. |
CLI do Azure | Se um desenvolvedor tiver autenticado no Azure usando o comando az login na CLI do Azure, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta. |
Azure PowerShell | Se um desenvolvedor tiver autenticado no Azure usando o Connect-AzAccount do Azure PowerShell, DefaultAzureCredential autenticará o aplicativo no Azure usando essa mesma conta. |
Interativo | Se habilitado, o DefaultAzureCredential autenticará interativamente o desenvolvedor por meio do navegador padrão do sistema atual. Por padrão, essa opção está desabilitada. |