Partilhar 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 é válido 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 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 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 é executado e é mostrado no diagrama a seguir:

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

Quando uma aplicação é:

  • Ao executar localmente durante ode desenvolvimento, a aplicação pode autenticar-se no Azure usando um principal de serviço de aplicação para desenvolvimento local ou usando as credenciais do Azure do desenvolvedor. Cada opção é discutida com mais detalhes na seção sobre 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 em autenticação em ambientes de servidor.
  • Hospedado e implantado no local, o aplicativo deve autenticar-se nos recursos do Azure usando um principal de serviço da aplicação. Essa opção é discutida com mais detalhes em autenticação em ambientes de servidor.

DefaultAzureCredential

A classe de 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 ambientes de teste e produção sem alterações de código. Você configura o método de autenticação apropriado para cada ambiente e DefaultAzureCredential detetará e usará automaticamente esse método de autenticação. O uso de DefaultAzureCredential deve ser preferido sobre a codificação manual de lógica condicional ou sinalizadores de recursos para usar diferentes métodos de autenticação em ambientes diferentes.

Os detalhes sobre o uso do DefaultAzureCredential são abordados em Usar DefaultAzureCredential em um aplicativo.

Vantagens da autenticação baseada em tokens

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 tokens descritos abaixo permitem que você estabeleça as permissões específicas necessárias para o aplicativo no recurso do Azure. Isto segue o princípio do menor privilégio. 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 abrangem o acesso ao recurso somente ao(s) aplicativo(s) destinado(s) a acessar o recurso.
  • No caso de uma identidade gerida, não há segredo da aplicação 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 quanto uma cadeia de conexão.

O uso de cadeias de conexão deve ser limitado a aplicativos iniciais de prova de conceito 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 tokens disponíveis na biblioteca de Identidades do Azure devem sempre ser preferidas ao autenticar em recursos do Azure.

Autenticação em ambientes de servidor

Quando se hospeda num ambiente de servidor, cada aplicação deve receber uma identidade de aplicação única por ambiente em que a aplicação é executada. 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 principal de serviço a utilizar para a sua aplicação depende de onde ela está a ser executada.

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

Por exemplo, um aplicativo Web .NET hospedado no Serviço de Aplicativo do Azure receberia 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)
As aplicações hospedadas fora do Azure (por exemplo, aplicações locais) que precisam conectar-se a serviços do Azure devem utilizar um principal de serviço da aplicação . Uma entidade de serviço de aplicação representa a identidade da aplicação no Azure e é criada através do processo de registro da aplicação.

Por exemplo, considere um aplicativo Web .NET hospedado no local que use o Armazenamento de Blobs do Azure. Você criaria um principal de serviço de aplicação para a aplicação usando o processo de registo da aplicação. Os AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_CLIENT_SECRET seriam armazenados como variáveis de ambiente para serem lidos pela aplicação em tempo de execução e permitiriam que a aplicação se autenticase no Azure usando o principal de serviço da Aplicação.

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 principais de serviço de aplicativo dedicados a serem usados durante o desenvolvimento local Nesse método, são configurados objetos dedicados de entidade de serviço de aplicativo usando o processo de registro de aplicações para uso durante o desenvolvimento local. A identidade do principal de serviço é então armazenada como variáveis de ambiente para serem acedidas pela aplicação quando é executada em desenvolvimento local.

Esse método permite que você atribua as permissões de recursos específicas necessárias para o aplicativo aos objetos principais de serviço usados pelos desenvolvedores durante o desenvolvimento local. Isso garante que o aplicativo tenha acesso apenas aos recursos específicos de que precisa 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 Neste método, um programador tem de ter sessão iniciada no Azure a partir do Visual Studio, da extensão Ferramentas do Azure para VS Code, da CLI do Azure ou do Azure PowerShell na estação de trabalho local. O aplicativo pode acessar as credenciais do desenvolvedor do repositório de credenciais e usar essas credenciais para acessar os recursos do Azure a partir do aplicativo.

Este método tem a vantagem de uma configuração mais fácil, uma vez que um programador só precisa de iniciar sessão na sua conta do Azure a partir 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 na produção.

Usar DefaultAzureCredential em um aplicativo

DefaultAzureCredential é uma sequência padronizada e ordenada de mecanismos para autenticação no Microsoft Entra ID. Cada mecanismo de autenticação é uma classe derivada da classe TokenCredential e é conhecida como de credenciais. No tempo de execução, 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 o 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 cliente do SDK do Azure. Essas classes e seus próprios serviços personalizados devem ser registrados para que possam ser acessados por meio de injeção de dependência em todo o aplicativo. No Program.cs, conclua as seguintes etapas para registrar uma classe de cliente e DefaultAzureCredential:

  1. Inclua os namespaces Azure.Identity e Microsoft.Extensions.Azure por meio de diretivas using.
  2. Registe o cliente de serviço do Azure usando o método de extensão com prefixo 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 ao 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 na sua estação de trabalho de desenvolvimento local, ele procura nas variáveis de ambiente por um principal de serviço da aplicação ou em ferramentas de desenvolvedor instaladas localmente, como o Visual Studio, por um conjunto de credenciais de desenvolvedor. Qualquer uma das abordagens 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 em outros serviços automaticamente.