Partilhar via


Implantando e dimensionando um aplicativo ASP.NET Core em Aplicativos de Contêiner do Azure

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.

Advertência

Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.

Importante

Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.

Para a versão atual, consulte a versão .NET 9 deste artigo.

Os aplicativos implantados no Azure que experimentam alta demanda intermitente se beneficiam da escalabilidade para atender à demanda. Os aplicativos escaláveis podem ser dimensionados para garantir a capacidade durante picos de carga de trabalho e, em seguida, reduzidos automaticamente quando o pico cair, o que pode reduzir os custos. O dimensionamento horizontal (dimensionamento horizontal, ou scaling out) adiciona novas instâncias de um recurso, como máquinas virtuais ou réplicas de banco de dados. Este artigo demonstra como implantar um aplicativo ASP.NET Core horizontalmente escalável para de aplicativos de contêiner do Azure concluindo as seguintes tarefas:

  1. Configurar o projeto de exemplo
  2. Desenvolver a aplicação para Azure Container Apps
  3. Dimensionar e solucionar problemas do aplicativo
  4. Criar os Serviços do Azure
  5. Conectar os serviços do Azure
  6. Configurar e reimplantar o aplicativo

Este artigo usa o Razor Pages, mas a maioria se aplica a outros aplicativos ASP.NET Core.

Em alguns casos, os aplicativos básicos do ASP.NET Core podem ser dimensionados sem considerações especiais. No entanto, os aplicativos que utilizam determinados recursos de estrutura ou padrões de arquitetura exigem configurações extras, incluindo o seguinte:

  • Envios de formulários seguros: Razor Pages, MVC e aplicativos de API da Web geralmente dependem de envios de formulários. Por padrão, estes aplicativos utilizam tokens de falsificação entre sites e serviços internos de proteção de dados para proteger as solicitações. Quando implantados na nuvem, esses aplicativos devem ser configurados para gerenciar preocupações com o serviço de proteção de dados em um local seguro e centralizado.

  • SignalR circuitos: Blazor Server aplicativos exigem o uso de um SignalR Azure para dimensionar com segurança. Esses serviços também utilizam os serviços de proteção de dados mencionados anteriormente.

  • Cache centralizado ou serviços de gerenciamento de estado: aplicativos escaláveis podem usar Cache do Azure para Redis para fornecer cache distribuído. de armazenamento do Azure pode ser necessário para armazenar o estado de estruturas como Microsoft Orleans, que pode ajudar a escrever aplicativos que gerenciam o estado em muitas instâncias de aplicativos diferentes.

As etapas neste artigo demonstram como resolver corretamente as preocupações anteriores implantando um aplicativo escalável nos Aplicativos de Contêiner do Azure. A maioria dos conceitos neste tutorial também se aplica ao dimensionamento instâncias do Serviço de Aplicativo do Azure.

Configurar o projeto de exemplo

Use o aplicativo de exemplo GitHub Explorer para acompanhar este tutorial. Clone o aplicativo do GitHub usando o seguinte comando:

git clone "https://github.com/dotnet/AspNetCore.Docs.Samples.git"

Navegue até a pasta /tutorials/scalable-razor-apps/start e abra o ScalableRazor.csproj.

O aplicativo de exemplo usa um formulário de pesquisa para procurar repositórios do GitHub pelo nome. O formulário depende dos serviços de proteção de dados ASP.NET Core integrados para lidar com questões antifalsificação. Por padrão, quando o aplicativo é dimensionado horizontalmente em Aplicativos de Contêiner, o serviço de proteção de dados lança uma exceção.

Testar a aplicação

  1. Inicie o aplicativo no Visual Studio. O projeto inclui um arquivo Docker, o que significa que a seta ao lado do botão Executar pode ser selecionada para iniciar o aplicativo usando uma configuração do Docker Desktop ou o servidor Web local padrão do ASP.NET Core.

Use o formulário de pesquisa para procurar repositórios do GitHub pelo nome.

Uma captura de tela mostrando o aplicativo GitHub Explorer.

Implantar o aplicativo em Aplicativos de Contêiner do Azure

O Visual Studio é usado para implantar o aplicativo em Aplicativos de Contêiner do Azure. Os aplicativos de contêiner fornecem um serviço gerenciado projetado para simplificar a hospedagem de aplicativos e microsserviços em contêineres.

Observação

Muitos dos recursos criados para o aplicativo exigem um local. Para este aplicativo, a localização não é importante. Um aplicativo real deve selecionar um local mais próximo dos clientes. Você pode querer selecionar um local perto de você.

  1. No gerenciador de soluções do Visual Studio, clique com o botão direito do mouse no nó do projeto de nível superior e selecione Publicar.

  2. Na caixa de diálogo de publicação, selecione do Azure como destino de implantação e selecione Avançar.

  3. Para o destino específico, selecione Aplicativos de Contêiner do Azure (Linux)e, em seguida, selecione Avançar.

  4. Crie um novo aplicativo de contêiner para implantar. Selecione o ícone de + verde para abrir uma nova caixa de diálogo e insira os seguintes valores:

    Uma captura de tela mostrando a implantação do Visual Studio.

    • Nome do aplicativo de contêiner: Deixe o valor padrão ou insira um nome.
    • Nome da subscrição: Selecione a subscrição para implementar.
    • Grupo de recursos: Selecione Novo e crie um novo grupo de recursos chamado msdocs-scalable-razor.
    • Ambiente de aplicativos de contêiner: Selecione Novo para abrir a caixa de diálogo de ambiente de aplicativos de contêiner e insira os seguintes valores:
      • Nome do ambiente: Mantenha o valor padrão.
      • Localização: Selecione um local perto de você.
      • Espaço de trabalho do Azure Log Analytics: Selecione Novo para abrir a caixa de diálogo do espaço de trabalho de análise de logs.
        • Nome: Deixe o valor padrão.
        • Localização: Selecione um local perto de você e, em seguida, selecione Ok para fechar a caixa de diálogo.
      • Selecione Ok para fechar a caixa de diálogo de ambiente de aplicativos de contêiner.
    • Selecione Criar para fechar a caixa de diálogo de aplicativos de contêiner original. O Visual Studio cria o recurso de aplicativo de contêiner no Azure.
  5. Depois que o recurso for criado, verifique se ele está selecionado na lista de aplicativos de contêiner e selecione Avançar.

  6. Você precisará criar um Registro de Contêiner do Azure para armazenar o artefato de imagem publicado para seu aplicativo. Selecione o ícone de + verde na tela de registro do contêiner.

    Uma captura de tela mostrando como criar um novo registro de contêiner.

  7. Deixe os valores padrão e selecione Criar.

    Uma captura de tela mostrando os valores de um novo registro de contêiner.

  8. Depois que o registro de contêiner for criado, verifique se ele está selecionado e, em seguida, selecione concluir para fechar o fluxo de trabalho da caixa de diálogo e exibir um resumo do perfil de publicação.

    Se o Visual Studio solicitar que você habilite o usuário Admin para acessar o contêiner docker publicado, selecione Sim.

  9. Selecione Publicar no canto superior direito do resumo do perfil de publicação para implantar o aplicativo no Azure.

Quando a implantação terminar, o Visual Studio inicia o navegador para exibir o aplicativo hospedado. Procure Microsoft no campo de formulário e uma lista de repositórios é exibida.

Escalar e solucionar problemas da aplicação

O aplicativo está funcionando atualmente sem problemas, mas gostaríamos de dimensioná-lo em mais instâncias em antecipação a altos volumes de tráfego.

  1. No portal do Azure, procure o aplicativo de contêiner razorscaling-app-**** na barra de pesquisa de nível superior e selecione-o nos resultados.
  2. Na página de visão geral, selecione Escala na navegação à esquerda e, em seguida, selecione + Editar e desdobrar.
  3. Na página de revisões, alterne para o separador Escala.
  4. Defina as instâncias min e max como 4 e selecione Criar. Essa alteração de configuração garante que seu aplicativo seja dimensionado horizontalmente em quatro instâncias.

Navegue de volta para o aplicativo. Quando a página carrega, a princípio parece que tudo está funcionando corretamente. No entanto, quando um termo de pesquisa é inserido e enviado, pode ocorrer um erro. Se um erro não for exibido, envie o formulário várias outras vezes.

Resolução de problemas relacionados ao erro

Não é imediatamente aparente por que as solicitações de pesquisa estão falhando. As ferramentas do navegador indicam que uma resposta 400 Bad Request foi enviada de volta. No entanto, você pode usar os recursos de log de aplicativos de contêiner para diagnosticar erros que ocorrem em seu ambiente.

  1. Na página de visão geral do aplicativo de contêiner, selecione Logs na navegação à esquerda.

  2. Na página Logs, feche o pop-up que se abre e navegue até o separador Tabelas.

  3. Expanda o item Logs Personalizados para revelar o nó ContainerAppConsoleLogs_CL. Esta tabela contém vários logs para o aplicativo contêiner que podem ser consultados para solucionar problemas.

    Uma captura de tela mostrando os logs do aplicativo contêiner.

  4. No editor de consultas, componha uma consulta básica para pesquisar a tabela ContainerAppConsoleLogs_CL Logs por exceções recentes, como o seguinte script:

    ContainerAppConsoleLogs_CL
    | where Log_s contains "exception"
    | sort by TimeGenerated desc
    | limit 500
    | project ContainerAppName_s, Log_s
    

    A consulta anterior procura na tabela ContainerAppConsoleLogs_CL quaisquer linhas que contenham a palavra exceção. Os resultados são ordenados pelo tempo gerado, limitado a 500 resultados, e incluem apenas as colunas ContainerAppName_s e Log_s para facilitar a leitura dos resultados.

  5. Selecione Executar, é exibida uma lista de resultados. Leia os logs e observe que a maioria deles está relacionada a tokens antifalsificação e criptografia.

    Uma captura de tela mostrando a consulta de logs.

    Importante

    Os erros no aplicativo são causados pelos serviços de proteção de dados .NET. Quando várias instâncias do aplicativo estão em execução, não há garantia de que a solicitação HTTP POST para enviar o formulário seja roteada para o mesmo contêiner que carregou inicialmente a página da solicitação HTTP GET. Se as solicitações forem tratadas por instâncias diferentes, os tokens antifalsificação não serão tratados corretamente e ocorrerá uma exceção.

    Nas etapas seguintes, esse problema é resolvido centralizando as chaves de proteção de dados em um serviço de armazenamento do Azure e protegendo-as com o Cofre de Chaves.

Criar os Serviços do Azure

Para resolver os erros anteriores, os seguintes serviços são criados e conectados ao aplicativo:

  • Conta de Armazenamento do Azure: lida com o armazenamento de dados para os Serviços de Proteção de Dados. Fornece um local centralizado para armazenar dados importantes à medida que o aplicativo é dimensionado. As contas de armazenamento também podem ser usadas para armazenar documentos, dados de fila, compartilhamentos de ficheiros e praticamente qualquer tipo de dados de blob.
  • Azure KeyVault: Este serviço armazena segredos para uma aplicação e é utilizado para ajudar a gerir problemas de encriptação para os Serviços de Proteção de Dados.

Criar o serviço de conta de armazenamento

  1. Na barra de pesquisa do portal do Azure, insira Storage accounts e selecione o resultado correspondente.
  2. Na página de listagem de contas de armazenamento, selecione + Criar.
  3. Na aba Noções básicas, insira os seguintes valores:
    • Subscrição: Selecione a mesma subscrição que escolheu para a aplicação contentor.
    • Grupo de Recursos: Selecione o grupo de recursos msdocs-scalable-razor que criou anteriormente.
    • Nome da conta de armazenamento: Nomeie a conta scalablerazorstorageXXXX onde os X são números aleatórios de sua escolha. Esse nome deve ser exclusivo em todo o Azure.
    • Região: Selecione a mesma região que você selecionou anteriormente.
  4. Deixe os restantes valores como padrão e selecione Revisão. Assim que o Azure validar as entradas, selecione Criar.

O Azure provisiona a nova conta de armazenamento. Quando a tarefa for concluída, escolha Ir para o recurso para ver o novo serviço.

Criar o contêiner de armazenamento

Crie um contêiner para armazenar as chaves de proteção de dados do aplicativo.

  1. Na página de visão geral da nova conta de armazenamento, selecione Navegador de armazenamento na barra de navegação à esquerda.
  2. Selecione contêineres de Blob.
  3. Selecione + Adicionar contêiner para abrir o menu suspenso Novo contêiner.
  4. Insira um nome de scalablerazorkeys, deixe o restante das configurações em seus padrões e selecione Criar.

Os novos contêineres aparecem na lista de páginas.

Criar o serviço de cofre de chaves

Crie um cofre de chaves para armazenar as chaves que protegem os dados no contêiner de armazenamento de blob.

  1. Na barra de pesquisa do portal do Azure, insira Key Vault e selecione o resultado correspondente.
  2. Na página de listagem do cofre de chaves, selecione + Criar.
  3. Na aba Noções básicas, insira os seguintes valores:
    • Subscrição: Selecione a mesma subscrição que foi selecionada anteriormente.
    • Grupo de Recursos: Selecione o grupo de recursos msdocs-scalable-razor criado anteriormente.
    • Nome do Cofre da Chave: Digite o nome scalablerazorvaultXXXX.
    • Região: Selecione uma região perto da sua localização.
  4. Deixe o resto das definições predefinidas e, em seguida, selecione Rever + criar. Aguarde até que o Azure valide as suas definições e, em seguida, selecione Criar.

O Azure provisiona o novo cofre de chaves. Quando a tarefa for concluída, selecione Ir para recurso para visualizar o novo serviço.

Criar a chave

Crie uma chave secreta para proteger os dados na conta de armazenamento de blobs.

  1. Na página principal de visão geral do cofre de chaves, selecione Chaves na barra de navegação à esquerda.
  2. Na página Criar uma chave, selecione + Gerar/Importar para abrir o menu suspenso Criar uma chave.
  3. Digite de chave de barbear no campo Nome. Deixe o restante das configurações em seus valores padrão e selecione Criar. Uma nova chave aparece na página da lista de chaves.

Conectar os Serviços do Azure

A aplicação de contentores requer uma ligação segura à conta de armazenamento e aos serviços do cofre de chaves para resolver os erros de proteção de dados e escalar corretamente. Os novos serviços estão conectados usando as seguintes etapas:

Importante

As atribuições de funções de segurança por meio do Service Connector e de outras ferramentas normalmente levam um ou dois minutos para serem propagadas e, em alguns casos raros, podem levar até oito minutos.

Conectar a conta de armazenamento

  1. No portal do Azure, navegue até a página de visão geral do Aplicativo de Contêiner.
  2. Na navegação à esquerda, selecione conector de serviço
  3. Na página Service Connector, escolha + Create para abrir o painel suspenso Criação de Conexão e insira os seguintes valores:
    • Container: Selecione o aplicativo de contêiner criado anteriormente.
    • Tipo de serviço: Escolha Armazenamento - blob.
    • Subscrição: Selecione a subscrição utilizada anteriormente.
    • Nome da conexão: Deixe o valor padrão.
    • Conta de armazenamento: Selecione a conta de armazenamento criada anteriormente.
    • Tipo de cliente: Selecione .NET.
  4. Selecione Seguinte: Autenticação para avançar para a próxima etapa.
  5. Selecione de identidade gerenciada atribuída ao sistema e escolha Next: Networking.
  6. Deixe as opções de rede padrão selecionadas e, em seguida, selecione Revisão + Criar.
  7. Quando Azure validar as configurações, selecione Criar.

O conector de serviço permite uma identidade gerenciada atribuída ao sistema no aplicativo de contêiner. Ele também atribui uma função de Colaborador de Dados de Blob de Armazenamento à identidade para que possa executar operações de dados nos contêineres de armazenamento.

Conecte o cofre de chaves

  1. No portal do Azure, navegue até a página de visão geral do Aplicativo de Contêiner.
  2. Na navegação à esquerda, selecione Conector de serviço.
  3. Na página Service Connector, escolha + Create para abrir o painel suspenso Criação de Conexão e insira os seguintes valores:
    • Container: Selecione o aplicativo de contêiner criado anteriormente.
    • Tipo de serviço: Escolha Cofre de Chaves.
    • Subscrição: Selecione a subscrição utilizada anteriormente.
    • Nome da conexão: Deixe o valor padrão.
    • Cofre da chave: Selecione o cofre da chave criado anteriormente.
    • Tipo de cliente: Selecione .NET.
  4. Selecione Seguinte: Autenticação para avançar para a próxima etapa.
  5. Selecione de identidade gerenciada atribuída ao sistema e escolha Next: Networking.
  6. Deixe as opções de rede padrão selecionadas e, em seguida, selecione Revisão + Criar.
  7. Quando Azure validar as configurações, selecione Criar.

O conector de serviço atribui uma função à identidade para que possa executar operações de dados nas chaves do cofre de chaves.

Configurar e reimplantar o aplicativo

Os recursos necessários do Azure foram criados. Nesta seção, o código do aplicativo é configurado para usar os novos recursos.

  1. Instale os seguintes pacotes NuGet:

    • Azure.Identity: Fornece classes para trabalhar com os serviços de gerenciamento de identidade e acesso do Azure.
    • Microsoft.Extensions.Azure: fornece métodos de extensão úteis para executar configurações principais do Azure.
    • Azure.Extensions.AspNetCore.DataProtection.Blobs: Permite armazenar chaves do DataProtection do ASP.NET Core no Armazenamento de Blobs do Azure para que as chaves possam ser compartilhadas entre várias instâncias de uma aplicação Web.
    • Azure.Extensions.AspNetCore.DataProtection.Keys: habilita a proteção de chaves em repouso usando o recurso Criptografia/encapsulamento de chaves do Cofre de Chaves do Azure.
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Blobs
    dotnet add package Azure.Extensions.AspNetCore.DataProtection.Keys
    
  2. Atualize Program.cs com o seguinte código realçado:

    using Azure.Identity;
    using Microsoft.AspNetCore.DataProtection;
    using Microsoft.Extensions.Azure;
    
    var builder = WebApplication.CreateBuilder(args);
    var BlobStorageUri = builder.Configuration["AzureURIs:BlobStorage"];
    var KeyVaultURI = builder.Configuration["AzureURIs:KeyVault"];
    
    builder.Services.AddRazorPages();
    builder.Services.AddHttpClient();
    builder.Services.AddServerSideBlazor();
    
    builder.Services.AddAzureClientsCore();
    
    builder.Services.AddDataProtection()
                    .PersistKeysToAzureBlobStorage(new Uri(BlobStorageUri),
                                                    new DefaultAzureCredential())
                    .ProtectKeysWithAzureKeyVault(new Uri(KeyVaultURI),
                                                    new DefaultAzureCredential());
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapRazorPages();
    
    app.Run();
    

As alterações anteriores permitem que o aplicativo gerencie a proteção de dados usando uma arquitetura centralizada e escalável. DefaultAzureCredential descobre as configurações de identidade gerenciadas habilitadas anteriormente quando o aplicativo é reimplantado.

Observação

O exemplo anterior usa DefaultAzureCredential para simplificar a autenticação ao desenvolver aplicativos que implantam no Azure combinando credenciais usadas em ambientes de hospedagem do Azure com credenciais usadas no desenvolvimento local. Ao passar para a produção, uma alternativa é uma escolha melhor, como ManagedIdentityCredential. Para obter mais informações, consulte Autenticar aplicativos .NET hospedados no Azure em recursos do Azure usando uma identidade gerenciada atribuída ao sistema.

Atualize os espaços reservados na seção AzureURIs do arquivo appsettings.json para incluir o seguinte:

  1. Substitua o marcador de posição <storage-account-name> pelo nome da conta de armazenamento scalablerazorstorageXXXX.

  2. Substitua o espaço reservado <container-name> pelo nome do contentor de armazenamento scalablerazorkeys.

  3. Substitua o espaço reservado <key-vault-name> pelo nome do cofre de chaves scalablerazorvaultXXXX.

  4. Substitua o marcador de posição <key-name> no URI do cofre de chaves pelo nome razorkey criado anteriormente.

    {
      "GitHubURL": "https://api.github.com",
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*",
      "AzureURIs": {
        "BlobStorage": "https://<storage-account-name>.blob.core.windows.net/<container-name>/keys.xml",
        "KeyVault": "https://<key-vault-name>.vault.azure.net/keys/<key-name>/"
      }
    }
    

Reimplantar o aplicativo

O aplicativo agora está configurado corretamente para usar os serviços do Azure criados anteriormente. Reimplante o aplicativo para que as alterações de código sejam aplicadas.

  1. Clique com o botão direito do mouse no nó do projeto no gerenciador de soluções e selecione Publicar.
  2. Na vista de resumo do perfil de publicação, selecione o botão Publicar no canto superior direito.

O Visual Studio reimplanta o aplicativo no ambiente de aplicativos de contêiner criado anteriormente. Quando os processos terminam, o navegador é iniciado na página inicial do aplicativo.

Teste o aplicativo novamente pesquisando Microsoft no campo de pesquisa. A página recarregará agora com os resultados corretos sempre que os enviar.

Configurar funções para desenvolvimento local

O código existente e a configuração do aplicativo também podem funcionar durante a execução local durante o desenvolvimento. A classe DefaultAzureCredential configurada anteriormente é capaz de pegar credenciais de ambiente local para autenticar nos Serviços do Azure. Você precisará atribuir as mesmas funções à sua própria conta que foram atribuídas à identidade gerenciada do seu aplicativo para que a autenticação funcione. Essa deve ser a mesma conta que você usa para fazer logon no Visual Studio ou na CLI do Azure.

Observação

DefaultAzureCredential simplifica a autenticação ao desenvolver aplicativos que implantam no Azure combinando credenciais usadas em ambientes de hospedagem do Azure com credenciais usadas no desenvolvimento local. Ao passar para a produção, uma alternativa é uma escolha melhor, como ManagedIdentityCredential. Para obter mais informações, consulte Autenticar aplicativos .NET hospedados no Azure em recursos do Azure usando uma identidade gerenciada atribuída ao sistema.

Inicie sessão no seu ambiente de desenvolvimento local

Você precisará estar conectado à CLI do Azure, Visual Studio ou Azure PowerShell para que suas credenciais sejam coletadas pelo DefaultAzureCredential.

az login

Atribuir funções à sua conta de programador

  1. No portal do Azure, navegue até a conta de armazenamento de scalablerazor**** criada anteriormente.
  2. Selecione Controle de Acesso (IAM) no painel de navegação à esquerda.
  3. Escolha + Adicionar e, em seguida, Atribuir função no menu suspenso.
  4. Na página Adicionar atribuição de função, procure por Storage blob data contributor, selecione o resultado correspondente e, em seguida, clique em Seguinte.
  5. Certifique-se de que a opção Utilizador, grupo ou entidade de serviço está selecionada e, depois, selecione + Selecionar membros.
  6. No submenu Selecionar membros, pesquise sua própria conta user@domain e selecione-a nos resultados.
  7. Escolha Próximo e, em seguida, selecione Revisão + atribuir. Depois que o Azure validar as configurações, selecione Revisar + atribuir novamente.

Como dito anteriormente, as permissões de atribuição de função podem levar um ou dois minutos para se propagar ou, em casos raros, até oito minutos.

Repita as etapas anteriores para atribuir uma função à sua conta para que ela possa aceder ao serviço do cofre de chaves e ao segredo.

  1. No portal do Azure, navegue para o cofre de chaves razorscalingkeys criado anteriormente.
  2. Selecione Controle de Acesso (IAM) no painel de navegação à esquerda.
  3. Escolha + Adicionar e, em seguida, Atribuir função no menu suspenso.
  4. Na página Adicionar atribuição de função, procure por Key Vault Crypto Service Encryption User, selecione o resultado correspondente e, em seguida, clique em Seguinte.
  5. Certifique-se de que a opção Utilizador, grupo ou entidade de serviço está selecionada e, depois, selecione + Selecionar membros.
  6. No submenu Selecionar membros, pesquise sua própria conta user@domain e selecione-a nos resultados.
  7. Escolha Próximo e, em seguida, selecione Revisão + atribuir. Após o Azure validar as suas configurações, selecione Revisar + atribuir novamente.

Talvez seja necessário aguardar novamente a propagação dessa atribuição de função.

Em seguida, você pode retornar ao Visual Studio e executar o aplicativo localmente. O código deve continuar a funcionar conforme o esperado. DefaultAzureCredential usa suas credenciais existentes do Visual Studio ou da CLI do Azure.

Observação

DefaultAzureCredential simplifica a autenticação ao desenvolver aplicativos que implantam no Azure combinando credenciais usadas em ambientes de hospedagem do Azure com credenciais usadas no desenvolvimento local. Ao passar para a produção, uma alternativa é uma escolha melhor, como ManagedIdentityCredential. Para obter mais informações, consulte Autenticar aplicativos .NET hospedados no Azure em recursos do Azure usando uma identidade gerenciada atribuída ao sistema.

Padrões de aplicativos Web corporativos

Para obter orientação sobre como criar um aplicativo ASP.NET Core confiável, seguro, com desempenho, testável e escalável, consulte Padrões de aplicativos Web corporativos. Está disponível um aplicativo Web de exemplo completo com qualidade de produção que implementa os padrões.