Partilhar via


Autenticar aplicativos NET nos serviços do Azure durante o desenvolvimento local usando entidades de serviço

Ao criar aplicativos em nuvem, os desenvolvedores precisam depurar e testar aplicativos em suas estações de trabalho locais. 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. Este artigo aborda como configurar objetos principais de serviço de aplicativo dedicados a serem usados durante o desenvolvimento local.

Um diagrama mostrando como um aplicativo .NET durante o desenvolvimento local usará as credenciais do desenvolvedor para se conectar ao Azure obtendo essas credenciais ferramentas de desenvolvimento instaladas localmente.

Entidades de serviço de aplicativo dedicadas para desenvolvimento local permitem que você siga o princípio de menor privilégio durante o desenvolvimento de aplicativos. Como as permissões têm como escopo exatamente o que é necessário para o aplicativo durante o desenvolvimento, o código do aplicativo é impedido de acessar acidentalmente um recurso do Azure destinado ao uso por um aplicativo diferente. Isso também evita que bugs ocorram quando o aplicativo é movido para produção porque o aplicativo era superprivilegiado no ambiente de desenvolvimento.

Uma entidade de serviço de aplicativo é configurada para o aplicativo quando o aplicativo é registrado no Azure. Ao registrar aplicativos para desenvolvimento local, recomenda-se:

  • Crie registros de aplicativo separados para cada desenvolvedor que trabalha no aplicativo. Isso criará entidades de serviço de aplicativo separadas para cada desenvolvedor usar durante o desenvolvimento local e evitará a necessidade de os desenvolvedores compartilharem credenciais para uma única entidade de serviço de aplicativo.
  • Crie registos de aplicações separados por aplicação. Isso define o escopo das permissões do aplicativo apenas para o que é necessário para o aplicativo.

Durante o desenvolvimento local, as variáveis de ambiente são definidas com a identidade da entidade de serviço do aplicativo. O SDK do Azure para NET lê essas variáveis de ambiente e usa essas informações para autenticar o aplicativo nos recursos do Azure de que ele precisa.

1 - Registar a aplicação no Azure

Os objetos principais do serviço de aplicativo são criados com um registro de aplicativo no Azure. Isso pode ser feito usando o portal do Azure ou a CLI do Azure.

Entre no portal do Azure e siga estas etapas.

Instruções Captura de ecrã
No portal do Azure:
  1. Insira registros de aplicativos na barra de pesquisa na parte superior do portal do Azure.
  2. Selecione o item rotulado Registros de aplicativos 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 aplicativos.
Na página Registos da aplicação, selecione + Novo registo. Uma captura de ecrã a mostrar a localização do botão Novo registo na página Registos da aplicação.
Na página Registar uma candidatura, preencha o formulário da seguinte forma.
  1. Nome → Insira um nome para o registro do aplicativo no Azure. Recomenda-se que esse nome inclua o nome do aplicativo, o usuário para o qual o registro do aplicativo é feito e um identificador como 'dev' para indicar que esse registro de aplicativo é para uso no desenvolvimento local.
  2. Tipos de conta suportados → Contas somente neste diretório organizacional.
Selecione Registrar para registrar seu aplicativo e criar a entidade de serviço do aplicativo.
Uma captura de tela mostrando como preencher a página Registrar um aplicativo dando um nome ao aplicativo e especificando os tipos de conta suportados como contas somente neste diretório organizacional.
Na página Registo da aplicação para a sua aplicação:
  1. ID do aplicativo (cliente) → Esta é a ID do 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 do diretório (locatário) → Esse valor também será necessário para seu aplicativo quando ele se autenticar no Azure. Copie esse valor para um local temporário em um editor de texto, ele também 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 ecrã da página de registo da aplicação após a conclusão do registo da aplicação. Esta captura de tela mostra o local do ID do aplicativo e do ID do locatário, que serão necessários em uma etapa futura. Ele também mostra o local do link a ser usado para adicionar um segredo de aplicativo para o aplicativo.
Na página Certificados & segredos, selecione + Novo segredo do cliente. Uma captura de tela mostrando o local do link a ser usado para criar um novo segredo de cliente na página de certificados e segredos.
A caixa de diálogo Adicionar um segredo do cliente aparecerá no lado direito da página. Nesta caixa de diálogo:
  1. Descrição → Insira um valor de Atual.
  2. Expira → Selecione um valor de 24 meses.
Selecione Adicionar para adicionar o segredo.
Uma captura de tela mostrando a página onde um novo segredo de cliente é adicionado para a entidade de serviço de aplicativo criada pelo processo de registro do aplicativo.
Na página Certificados & 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 de cliente adicional sem invalidar esse segredo de cliente, mas não verá esse valor novamente.
Uma captura de tela mostrando a página com o segredo do cliente gerado.

2 - Criar um grupo de segurança do Azure AD para desenvolvimento local

Como normalmente há vários desenvolvedores que trabalham em um aplicativo, é recomendável criar um grupo do Azure AD para encapsular as funções (permissões) de que o aplicativo precisa no desenvolvimento local, em vez de atribuir as funções a objetos principais de serviço individuais. Isto oferece as seguintes vantagens.

  • Todos os desenvolvedores têm a garantia de ter as mesmas funções atribuídas, uma vez que as funções são atribuídas no nível do grupo.
  • Se uma nova função for necessária para o aplicativo, ela só precisará ser adicionada ao grupo do Azure AD para o aplicativo.
  • Se um novo desenvolvedor ingressar na equipe, uma nova entidade de serviço de aplicativo será criada para o desenvolvedor e adicionada ao grupo, garantindo que o desenvolvedor tenha as permissões certas para trabalhar no aplicativo.
Instruções Captura de ecrã
Navegue até a página do Azure Ative Directory no portal do Azure digitando Azure Ative Directory na caixa de pesquisa na parte superior da página e selecionando Azure Ative Directory em serviços. Uma captura de tela mostrando como usar a barra de pesquisa superior no portal do Azure para pesquisar e navegar até a página do Azure Ative Directory.
Na página Azure Ative Directory, selecione Grupos no menu à esquerda. Uma captura de tela mostrando o local do item de menu Grupos no menu esquerdo da página Diretório Padrão do Ative Directory do Azure.
Na página Todos os grupos, selecione Novo grupo. Uma captura de ecrã a mostrar a localização do botão Novo Grupo na página Todos os grupos.
Na página Novo Grupo:
  1. Tipo de grupo → Segurança
  2. Nome do grupo → Um nome para o grupo de segurança, normalmente criado a partir do nome do aplicativo. Também é útil incluir uma cadeia de caracteres como local-dev no nome do grupo para indicar a finalidade do grupo.
  3. Descrição do grupo → Uma descrição do objetivo do grupo.
  4. Selecione o link Sem membros selecionados em Membros para adicionar membros ao grupo.
Uma captura de tela mostrando como preencher o formulário para criar um novo grupo do Azure Ative Directory para o aplicativo. Esta captura de tela também mostra o local do link a ser selecionado para adicionar membros a esse grupo.
Na caixa de diálogo Adicionar membros :
  1. Use a caixa de pesquisa para filtrar a lista de nomes principais na lista.
  2. Selecione as entidades de serviço de aplicativo para desenvolvimento local para este aplicativo. À medida que os objetos são selecionados, eles ficarão acinzentados e serão movidos para a lista Itens selecionados na parte inferior da caixa de diálogo.
  3. Quando terminar, selecione o botão Selecionar .
Uma captura de tela da caixa de diálogo Adicionar membros mostrando como selecionar entidades de serviço de aplicativo a serem incluídas no grupo.
De volta à página Novo grupo , selecione Criar para criar o grupo.

O grupo será criado e você será levado de volta para a página Todos os grupos . Pode levar até 30 segundos para que o grupo apareça e talvez seja necessário atualizar a página devido ao cache no portal do Azure.
Uma captura de tela da página Novo Grupo mostrando como concluir o processo selecionando o botão Criar.

3 - Atribuir funções à aplicação

Em seguida, você precisa determinar quais funções (permissões) seu aplicativo precisa em quais recursos e atribuir essas funções ao seu aplicativo. Neste exemplo, as funções serão atribuídas ao grupo do Azure Ative Directory criado na etapa 2. As funções podem ser atribuídas a uma função em um recurso, grupo de recursos ou escopo de assinatura. Este exemplo mostrará como atribuir funções no escopo do grupo de recursos, já que a maioria dos aplicativos agrupa todos os seus recursos do Azure em um único grupo de recursos.

Instruções Captura de ecrã
Localize o grupo de recursos para seu aplicativo pesquisando o nome do grupo de recursos 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 sob o título Grupos de Recursos na caixa de diálogo.
Uma captura de tela mostrando como usar a caixa de pesquisa superior no 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 mostrando o local do item de menu Controle de acesso (IAM).
Na página Controle de acesso (IAM):
  1. Selecione o separador Atribuição de funções.
  2. Selecione + Adicionar no menu superior e, em seguida, Adicionar atribuição de função no menu suspenso resultante.
Uma captura de tela mostrando como navegar até a guia 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 para o grupo de recursos.
  1. Use a caixa de pesquisa para filtrar a lista para um tamanho mais gerenciável. Este exemplo mostra como filtrar funções de Blob de Armazenamento.
  2. Selecione a função que pretende atribuir.
Selecione Avançar para ir para a próxima tela.
Uma captura de tela mostrando 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 em Atribuir acesso a.
  2. Selecione + Selecionar membros em Membros
Uma caixa de diálogo será aberta no lado direito do portal do Azure.
Uma captura de tela mostrando 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 atribuir 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 do grupo de desenvolvimento local do Azure AD que você criou para o aplicativo.
  2. Selecione o grupo de desenvolvimento local do Azure AD associado ao seu aplicativo.
Selecione Selecionar na parte inferior da caixa de diálogo para continuar.
Uma captura de tela mostrando como filtrar e selecionar o grupo do Azure AD para o aplicativo na caixa de diálogo Selecionar membros.
O grupo do Azure AD agora será exibido como selecionado na tela Adicionar atribuição de função.

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

4 - Definir variáveis de ambiente de aplicação

O DefaultAzureCredential objeto procurará as informações da entidade de serviço em um conjunto de variáveis de ambiente em tempo de execução. 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 seguintes variáveis de ambiente ao trabalhar com uma entidade de serviço.

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

Ao trabalhar localmente com o Properties Visual Studio, as launchsettings.json variáveis de ambiente podem ser definidas no arquivo na pasta do seu projeto. Quando o aplicativo for iniciado, esses valores serão puxados automaticamente. Lembre-se de que essas configurações não viajam com seu aplicativo quando ele é implantado, portanto, você ainda precisará configurar variáveis de ambiente em seu ambiente de hospedagem de destino.

"profiles": {
    "SampleProject": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7177;http://localhost:5177",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 - Implementar DefaultAzureCredential em seu aplicativo

DefaultAzureCredential Suporta vários métodos de autenticação e determina o método de autenticação que está sendo usado em tempo de execução. 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 DefaultAzureCredentialo , primeiro adicione os Azure.Identity pacotes e, opcionalmente, ao Microsoft.Extensions.Azure 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 de aplicativo e digite o comando abaixo.

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

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

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

Um exemplo disso é mostrado no segmento de código 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 é executado em sua estação de trabalho local durante o desenvolvimento local, ele procurará nas variáveis de ambiente uma entidade de serviço de aplicativo ou no Visual Studio, VS Code, CLI do Azure ou Azure PowerShell para um conjunto de credenciais de desenvolvedor, qualquer uma das quais 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.