Compartilhar via


Autenticar aplicativos .NET nos serviços do Azure usando a visão geral da biblioteca de identidades do Azure

Quando um aplicativo precisa acessar um recurso do Azure, o aplicativo deve ser autenticado no Azure. Isso é verdadeiro para todos os aplicativos, sejam 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 as bibliotecas de cliente do SDK do Azure.

É recomendável que os aplicativos usem autenticação baseada em token em vez de cadeias de conexão ao autenticar recursos do Azure. A biblioteca de Identidade do Azure fornece classes que dão suporte à autenticação baseada em token e permitem que os aplicativos se autentiquem automaticamente nos recursos do Azure, esteja o aplicativo em desenvolvimento local, implantado no Azure ou implantado em um servidor no 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 é executado e é mostrado no diagrama a seguir:

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

Quando um aplicativo é:

  • Executado localmente durante o desenvolvimento, 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 opção é discutida em mais detalhes em autenticação durante o desenvolvimento local.
  • Hospedado no Azure, o aplicativo deve se autenticar nos recursos do Azure usando uma identidade gerenciada. Essa opção é discutida com mais detalhes na seção autenticação em ambientes de servidores.
  • 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 em mais detalhes em autenticação em ambientes de servidor.

DefaultAzureCredential

A classe DefaultAzureCredential fornecida pela biblioteca de Identidade 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 promovidos do desenvolvimento local para testar ambientes para produção sem alterações de código. Você configura o método de autenticação apropriado para cada ambiente e DefaultAzureCredential detectará e usará automaticamente esse método de autenticação. O uso de DefaultAzureCredential deve ser preferido em vez de codificar manualmente a lógica condicional ou sinalizadores de recursos para usar diferentes métodos de autenticação em ambientes diferentes.

Os detalhes sobre como usar DefaultAzureCredential são abordados em Usar DefaultAzureCredential em um aplicativo.

Vantagens da autenticação baseada em token

A autenticação baseada em token oferece as seguintes vantagens em relação à autenticação com cadeias de conexão:

  • Os métodos de autenticação baseados em token descritos abaixo permitem estabelecer as permissões específicas necessárias para o aplicativo no recurso do Azure. Isso segue o princípio de privilégios mínimos. Por outro lado, uma cadeia de conexão concede direitos completos ao recurso do Azure.
  • Enquanto qualquer pessoa ou qualquer aplicativo com uma cadeia de conexão pode se conectar a um recurso do Azure, os métodos de autenticação baseados em token definem o acesso ao recurso apenas para os aplicativos destinados a acessar o recurso.
  • No caso de uma identidade gerenciada, não há nenhum segredo de aplicativo para armazenar. Isso torna o aplicativo mais seguro porque não há nenhuma cadeia de conexão ou segredo do aplicativo que possa ser comprometido.
  • O pacote Azure.Identity adquire e gerencia tokens do Microsoft Entra para você. Isso torna o uso da autenticação baseada em token tão fácil de usar como uma cadeia de conexão.

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 baseadas em token disponíveis na biblioteca de Identidade do Azure sempre devem ser preferenciais ao autenticar recursos do Azure.

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 qual o aplicativo é executado. 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.

Método de autenticação Descrição
Aplicativos hospedados no Azure Os aplicativos hospedados no Azure devem usar uma entidade de serviço de Identidade Gerenciada. As identidades gerenciadas são projetadas para representar a identidade de um aplicativo hospedado no Azure e só podem ser usadas com aplicativos hospedados no Azure.

Por exemplo, um aplicativo Web .NET hospedado no Serviço de Aplicativo do Azure recebe uma Identidade Gerenciada. A Identidade Gerenciada atribuída ao aplicativo seria usada para autenticar o aplicativo em outros serviços do Azure.

Aplicativos hospedados fora do Azure
(por exemplo, aplicativos locais)
Os aplicativos hospedados fora do Azure (por exemplo, aplicativos locais) que precisam se conectar aos serviços do Azure devem usar uma entidade de serviço de aplicativo. Uma entidade de serviço de aplicativo representa a identidade do aplicativo no Azure e é criada por meio do processo de registro do aplicativo.

Por exemplo, considere um aplicativo Web .NET hospedado localmente que usa o Armazenamento de Blobs do Azure. Você criaria uma entidade de serviço de aplicativo para o aplicativo usando o processo de registro de aplicativo. O AZURE_CLIENT_ID, AZURE_TENANT_ID e AZURE_CLIENT_SECRET seriam armazenados como variáveis de ambiente para serem lidos pelo aplicativo em runtime e permitir que o aplicativo se autenticasse no Azure usando a entidade de serviço de aplicativo.

Autenticação durante o desenvolvimento local

Quando um aplicativo é executado na estação de trabalho de um desenvolvedor durante o desenvolvimento local, ele ainda deve se autenticar em todos os serviços do Azure usados pelo aplicativo. As duas principais estratégias para autenticar aplicativos no Azure durante o desenvolvimento local são:

Método de autenticação Descrição
Criar objetos de entidade de serviço de aplicativo dedicados a serem usados durante o desenvolvimento local Nesse método, os objetos de entidade de serviço de aplicativo dedicados são configurados usando o processo de registro de aplicativo para uso durante o desenvolvimento local. A identidade do principal de serviço é armazenada como variáveis de ambiente a serem acessadas pelo aplicativo quando este é executado no desenvolvimento local.

Esse método permite atribuir as permissões de recurso específicas necessárias pelo aplicativo aos objetos do principal de serviço usados pelos desenvolvedores durante o desenvolvimento local. Isso garante que o aplicativo tenha acesso apenas aos recursos específicos necessários e replica as permissões que o aplicativo terá em produção.

A desvantagem dessa abordagem é a necessidade de criar objetos de entidade de serviço separados para cada desenvolvedor que trabalha em um aplicativo.

Autenticar o aplicativo no Azure usando as credenciais do desenvolvedor durante o desenvolvimento local Nesse método, um desenvolvedor deve ser conectado ao Azure por meio do Visual Studio, da extensão ferramentas do Azure para VS Code, da CLI do Azure ou do Azure PowerShell em sua estação de trabalho local. Em seguida, o aplicativo pode acessar as credenciais do desenvolvedor do repositório de credenciais e usar essas credenciais para acessar os recursos do Azure do aplicativo.

Esse método tem a vantagem de facilitar a configuração, pois um desenvolvedor só precisa fazer logon em sua conta do Azure do Visual Studio, VS Code ou da CLI do Azure. A desvantagem dessa abordagem é que a conta do desenvolvedor provavelmente tem mais permissões do que o exigido pelo aplicativo. Portanto, essa abordagem não replica com precisão as permissões com as quais o aplicativo será executado em produção.

Usar DefaultAzureCredential em um aplicativo

DefaultAzureCredential é uma sequência ordenada e opinativa de mecanismos para autenticação no Microsoft Entra ID. Cada mecanismo de autenticação é uma classe derivada da classe TokenCredential e é conhecida como uma credencial. Em runtime, DefaultAzureCredential tenta autenticar usando a primeira credencial. Se essa credencial não conseguir adquirir um token de acesso, a próxima credencial na sequência será tentada e assim por diante, até que um token de acesso seja obtido com êxito. Dessa forma, seu aplicativo pode usar credenciais diferentes em ambientes diferentes sem escrever código específico do ambiente.

Para usar DefaultAzureCredential, adicione os pacotes Azure.Identity e, opcionalmente, os pacotes Microsoft.Extensions.Azure ao seu aplicativo:

Em um terminal de sua escolha, navegue até o diretório do projeto de aplicativo e execute os seguintes comandos:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Os serviços do Azure são acessados usando classes de cliente especializadas das várias bibliotecas de clientes do SDK do Azure. Essas classes e seus próprios serviços personalizados devem ser registrados para que possam ser acessados por meio da injeção de dependência em todo o aplicativo. Em Program.cs, conclua as seguintes etapas para registrar uma classe cliente e DefaultAzureCredential:

  1. Inclua os namespaces Azure.Identity e Microsoft.Extensions.Azure por meio de diretivas de using.
  2. Registre o cliente de serviço do Azure usando o método de extensão prefixado Addcorrespondente.
  3. Passe uma instância de DefaultAzureCredential para o método UseCredential.

Por exemplo:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

Uma alternativa para UseCredential é instanciar DefaultAzureCredential diretamente.

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Quando o código anterior é executado em sua estação de trabalho de desenvolvimento local, ele procura nas variáveis de ambiente por uma entidade de serviço de aplicativo ou em ferramentas para desenvolvedores instaladas localmente, como o Visual Studio, por um conjunto de credenciais de desenvolvedor. Qualquer abordagem pode ser usada para autenticar o aplicativo nos recursos do Azure durante o desenvolvimento local.

Quando implantado no Azure, esse mesmo código também pode autenticar seu aplicativo em outros recursos do Azure. DefaultAzureCredential pode recuperar configurações de ambiente e configurações de identidade gerenciada para autenticar-se em outros serviços automaticamente.