Compartilhar via


Autenticar em recursos do Azure a partir de aplicativos .NET hospedados localmente

Os aplicativos hospedados fora do Azure (por exemplo, no local ou em um data center de terceiros) devem usar uma entidade de serviço de aplicativo para autenticar no Azure ao acessar recursos do Azure. Os objetos da entidade de serviço de aplicativo são criados com um processo de registro de aplicativo no Azure. Quando uma entidade de serviço de aplicativo for criada, uma ID do cliente e um segredo do cliente serão gerados para seu aplicativo. A ID do cliente, o segredo do cliente e sua ID de locatário são armazenados em variáveis de ambiente para que possam ser usados pelo SDK do Azure para .NET a fim de autenticar seu aplicativo no Azure em runtime.

Um registro de aplicativo diferente deve ser criado para cada ambiente em que o aplicativo está hospedado. Assim, as permissões de recurso específicas ao ambiente podem ser configuradas para cada entidade de serviço, e um aplicativo implantado em um ambiente não falará com recursos do Azure que fazem parte de outro ambiente.

1 – Registrar o aplicativo no Azure

Um aplicativo pode ser registrado no Azure usando o portal do Azure ou a CLI do Azure.

Entre no portal do Azure e siga estas etapas.

Instruções Captura de tela
No portal do Azure:
  1. Insira registros de aplicativos na caixa de pesquisa na parte superior do portal do Azure.
  2. Selecione o item rotulado Registros de aplicativo sob o título Serviços no menu que aparece abaixo da barra de pesquisa.
Uma captura de tela mostrando como usar a barra de pesquisa superior no portal do Azure para localizar e navegar até a página Registros de aplicativo.
Na páginaRegistros de aplicativo, selecione + Novo registro. Uma captura de tela mostrando a localização do botão Novo registro na página Registros de aplicativo.
Na página Registrar um aplicativo, preencha o formulário conforme segue.
  1. Nome → Insira um nome para o registro de aplicativo no Azure. Recomendamos que esse nome inclua o nome do aplicativo e o ambiente (teste, prod) referente ao registro do aplicativo.
  2. Tipos de conta compatíveisContas somente neste diretório organizacional.
Selecione Registrar para registrar seu aplicativo e criar a entidade de serviço de aplicativo.
Uma captura de tela mostrando como preencher a página Registrar um aplicativo dando um nome ao aplicativo e especificando os tipos de contas compatíveis como contas somente neste diretório organizacional.
Na página Registro de aplicativo do seu aplicativo:
  1. ID do aplicativo (cliente) → Essa é a ID de aplicativo que o aplicativo usará para acessar o Azure durante o desenvolvimento local. Copie esse valor para um local temporário em um editor de texto, pois você precisará dele em uma etapa futura.
  2. ID de diretório (locatário) → Esse valor também será necessário para seu aplicativo quando ele for autenticado no Azure. Copie esse valor para um local temporário em um editor de texto, pois ele será necessário em uma etapa futura.
  3. Credenciais do cliente → Você deve definir as credenciais do cliente para o aplicativo antes que seu aplicativo possa se autenticar no Azure e usar os serviços do Azure. Selecione Adicionar um certificado ou segredo para adicionar credenciais ao seu aplicativo.
Uma captura de tela da página Registro de aplicativo após a conclusão do registro de aplicativo. Esta captura de tela mostra a localização da ID do aplicativo e da ID do locatário, que serão necessárias em uma etapa futura. Ela também mostra a localização do link a ser usado para adicionar um segredo de aplicativo para o aplicativo.
Na página Certificados e segredos, selecione + Novo segredo do cliente. Uma captura de tela mostrando o local do link a ser usado para criar um novo segredo do cliente na página de certificados e segredos.
A caixa de diálogo Adicionar um segredo de cliente será exibida do lado direito da página. Nesta caixa de diálogo:
  1. Descrição → Inserir um valor de Atual.
  2. Expira → Selecione um valor de 24 meses.
Selecione Adicionar para adicionar o segredo.

IMPORTANTE: defina um lembrete em seu calendário antes da data de validade do segredo. Dessa forma, você pode adicionar um novo segredo antes e atualizar seus aplicativos antes da expiração desse segredo e evitar uma interrupção de serviço em seu aplicativo.
Uma captura de tela mostrando a página em que um novo segredo do cliente é adicionado para a entidade de serviço de aplicativo criada pelo processo de registro de aplicativo.
Na página Certificados e segredos, será mostrado o valor do segredo do cliente.

Copie esse valor para um local temporário em um editor de texto, pois você precisará dele em uma etapa futura.

IMPORTANTE: esta é a única vez que você verá esse valor. Depois de sair ou atualizar esta página, você não poderá ver esse valor novamente. Você pode adicionar um segredo do cliente extra sem invalidar esse segredo do cliente, mas não verá esse valor novamente.
Uma captura de tela mostrando a página com o segredo do cliente gerado.

2 – Atribuir funções à entidade de serviço de aplicativo

Em seguida, você precisa determinar as funções (permissões) de que seu aplicativo precisa em quais recursos e atribuir essas funções ao seu aplicativo. As funções podem ser atribuídas a uma função em um recurso, grupo de recursos ou escopo de assinatura. Este exemplo mostra como atribuir funções para a entidade de serviço no escopo do grupo de recursos, uma vez que a maioria dos aplicativos agrupa todos os seus recursos do Azure em um único grupo de recursos.

Instruções Captura de tela
Localize o grupo de recursos do aplicativo pesquisando pelo nome do grupo de recursos e usando a caixa de pesquisa na parte superior do portal do Azure.

Navegue até o grupo de recursos selecionando o nome do grupo de recursos no título Grupos de recursos na caixa de diálogo.
Uma captura de tela que mostra como usar a caixa de pesquisa na parte superior do portal do Azure para localizar e navegar até o grupo de recursos ao qual você deseja atribuir funções (permissões).
Na página do grupo de recursos, selecione Controle de acesso (IAM) no menu à esquerda. Uma captura de tela da página do grupo de recursos que mostra a localização do item de menu Controle de acesso (IAM).
Na página Controle de acesso (IAM):
  1. Selecione a guia Atribuições de função.
  2. Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.
Uma captura de tela que mostra como navegar até a guia de atribuições de função e o local do botão usado para adicionar atribuições de função a um grupo de recursos.
A página Adicionar atribuição de função lista todas as funções que podem ser atribuídas ao grupo de recursos.
  1. Use a caixa de pesquisa para filtrar a lista para obter um tamanho mais gerenciável. Este exemplo mostra como filtrar as funções do Blob de Armazenamento.
  2. Selecione a função que você deseja atribuir.
Selecione Avançar para ir para a próxima tela.
Uma captura de tela que mostra como filtrar e selecionar atribuições de função a serem adicionadas ao grupo de recursos.
A próxima página Adicionar atribuição de função permite especificar a qual usuário atribuir a função.
  1. Selecione Usuário, grupo ou entidade de serviço emAtribuir acesso a.
  2. Selecionar + Selecionar membros em Membros
Uma caixa de diálogo será aberta no lado direito do portal do Azure.
Uma captura de tela que mostra o botão de opção a ser selecionado para atribuir uma função a um grupo do Azure AD e o link usado para selecionar o grupo ao qual atribui a função.
Na caixa de diálogo Selecionar membros:
  1. A caixa de texto Selecionar pode ser usada para filtrar a lista de usuários e grupos em sua assinatura. Se necessário, digite os primeiros caracteres da entidade de serviço que você criou para o aplicativo para filtrar a lista.
  2. Selecione a entidade de serviço associada ao aplicativo.
Para continuar, selecione Selecionar na parte inferior da caixa de diálogo.
Uma captura de tela que mostra como filtrar e selecionar o grupo do Azure AD para o aplicativo na caixa de diálogo Selecionar membros.
Agora, a entidade de serviço será exibida como selecionado na tela Adicionar atribuição de função.

Selecione Revisar + atribuir para ir para a página final e, em seguida, Revisar + atribuir novamente para concluir o processo.
Uma captura de tela que mostra a página Adicionar atribuição de função concluída e o local do botão Revisar + atribuir usado para concluir o processo.

3 – Configurar variáveis de ambiente para o aplicativo

O objeto DefaultAzureCredential procurará as credenciais da entidade de serviço em um conjunto de variáveis de ambiente em runtime. Há várias maneiras de configurar variáveis de ambiente ao trabalhar com o .NET, dependendo de suas ferramentas e ambiente.

Independentemente da abordagem escolhida, você precisará configurar as variáveis de ambiente a seguir ao trabalhar com uma entidade de serviço.

  • AZURE_CLIENT_ID → O valor da ID do aplicativo.
  • AZURE_TENANT_ID → O valor da ID do locatário.
  • AZURE_CLIENT_SECRET → A senha/credencial gerada para o aplicativo.

Se o aplicativo estiver hospedado no IIS, recomendamos definir variáveis de ambiente por pool de aplicativos para isolar as configurações entre aplicativos.

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost

Você também pode definir essas configurações diretamente usando o elemento applicationPools dentro do arquivo applicationHost.config.

<applicationPools>
   <add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
      <environmentVariables>
         <add name="ASPNETCORE_ENVIRONMENT" value="Development" />
         <add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
         <add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
         <add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
      </environmentVariables>
   </add>
</applicationPools>

4 – Implementar DefaultAzureCredential no aplicativo

DefaultAzureCredential dá suporte a vários métodos de autenticação e determina o método de autenticação que está sendo usado em runtime. Dessa forma, seu aplicativo pode usar diferentes métodos de autenticação em ambientes diferentes sem implementar código específico do ambiente.

A ordem e os locais em que DefaultAzureCredential procura credenciais são encontrados em DefaultAzureCredential.

Para implementar DefaultAzureCredential, primeiro adicione os pacotes Azure.Identity e, opcionalmente, os pacotes Microsoft.Extensions.Azure ao seu aplicativo. Você pode fazer isso usando a linha de comando ou o Gerenciador de Pacotes NuGet.

Abra um ambiente de terminal de sua escolha no diretório do projeto do aplicativo e insira o comando abaixo.

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

Os serviços do Azure geralmente são acessados usando classes de cliente correspondentes do SDK. Essas classes e seus próprios serviços personalizados devem ser registrados no arquivo Program.cs para que possam ser acessados por meio de injeção de dependência em todo o aplicativo. Dentro de Program.cs, siga as etapas abaixo para configurar corretamente seu serviço e DefaultAzureCredential.

  1. Inclua os namespaces Azure.Identity e Microsoft.Extensions.Azure com uma diretiva using.
  2. Registre o serviço do Azure usando métodos auxiliares relevantes.
  3. Passe uma instância do objeto DefaultAzureCredential para o método UseCredential.

Um exemplo disso é mostrado na ilustração a seguir.

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

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

Como alternativa, você também pode utilizar DefaultAzureCredential em seus serviços mais diretamente sem a ajuda de métodos de registro adicionais do Azure, conforme visto abaixo.

using Azure.Identity;

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

Quando o código acima for executado em sua estação de trabalho local durante o desenvolvimento local, ele procurará nas variáveis de ambiente de uma entidade de serviço de aplicativo ou no Visual Studio, VS Code, na CLI do Azure ou Azure PowerShell um conjunto de credenciais de desenvolvedor, que podem ser usadas 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.