Tutorial: Conectar um aplicativo do Serviço de Aplicativo ao Banco de Dados SQL em nome do usuário conectado

Este tutorial mostra como habilitar a autenticação interna em um aplicativo do Serviço de Aplicativo usando o provedor de autenticação Microsoft Entra e, em seguida, estendê-la conectando-a a um Banco de Dados SQL do Azure back-end representando o usuário conectado (também conhecido como fluxo em nome de). Esta é uma abordagem de conectividade mais avançada para o Tutorial: Acessar dados com identidade gerenciada e tem as seguintes vantagens em cenários corporativos:

  • Elimina segredos de conexão com serviços de back-end, assim como a abordagem de identidade gerenciada.
  • Dá ao banco de dados back-end (ou qualquer outro serviço do Azure) mais controle sobre quem ou quanto conceder acesso aos seus dados e funcionalidades.
  • Permite que o aplicativo adapte sua apresentação de dados ao usuário conectado.

Neste tutorial, você adiciona a autenticação do Microsoft Entra ao aplicativo Web de exemplo implantado em um dos seguintes tutoriais:

Quando terminar, seu aplicativo de exemplo autenticará os usuários que se conectarem ao Banco de dados SQL com segurança em nome do usuário conectado.

Diagrama de arquitetura para cenário tutorial.

Nota

As etapas abordadas neste tutorial suportam as seguintes versões:

  • .NET Framework 4.8 e superior
  • .NET 6.0 e superior

O que você vai aprender:

  • Habilitar a autenticação interna para o Banco de Dados SQL do Azure
  • Desabilitar outras opções de autenticação no Banco de Dados SQL do Azure
  • Ativar a autenticação do Serviço de Aplicações
  • Usar o Microsoft Entra ID como o provedor de identidade
  • Acessar o Banco de Dados SQL do Azure em nome do usuário conectado do Microsoft Entra

Nota

A autenticação do Microsoft Entra é diferente da autenticação integrada do Windows no Ative Directory local (AD DS). O AD DS e o Microsoft Entra ID usam protocolos de autenticação completamente diferentes. Para obter mais informações, consulte a documentação dos Serviços de Domínio Microsoft Entra.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Este artigo continua de onde parou em um dos seguintes tutoriais:

Se ainda não o fez, siga primeiro um dos dois tutoriais. Como alternativa, você pode adaptar as etapas para seu próprio aplicativo .NET com o Banco de dados SQL.

Prepare seu ambiente para a CLI do Azure.

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Captura de tela que mostra um exemplo de Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Botão para iniciar o Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Captura de tela que mostra o botão Cloud Shell no portal do Azure

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

1. Configurar o servidor de banco de dados com autenticação Microsoft Entra

Primeiro, habilite a autenticação do Microsoft Entra no Banco de dados SQL atribuindo um usuário do Microsoft Entra como administrador do servidor. Este utilizador é diferente da conta Microsoft que utilizou para se inscrever na sua subscrição do Azure. Deve ser um usuário que você criou, importou, sincronizou ou convidou para o Microsoft Entra ID. Para obter mais informações sobre usuários permitidos do Microsoft Entra, consulte Recursos e limitações do Microsoft Entra no Banco de dados SQL.

  1. Se o seu locatário do Microsoft Entra ainda não tiver um usuário, crie um seguindo as etapas em Adicionar ou excluir usuários usando a ID do Microsoft Entra.

  2. Localize a ID do objeto do usuário do Microsoft Entra usando o e substitua user-principal-name>.az ad user list < O resultado é salvo em uma variável.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Gorjeta

    Para ver a lista de todos os nomes principais de usuário no Microsoft Entra ID, execute az ad user list --query [].userPrincipalName.

  3. Adicione este usuário do Microsoft Entra como administrador do Ative Directory usando az sql server ad-admin create o comando no Cloud Shell. No comando a seguir, substitua <server-name> pelo nome do servidor (sem o sufixo.database.windows.net).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Restrinja a autenticação do servidor de banco de dados à autenticação do Ative Directory. Esta etapa desabilita efetivamente a autenticação SQL.

    az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
    

Para obter mais informações sobre como adicionar um administrador do Ative Directory, consulte Provisionar o administrador do Microsoft Entra (Banco de dados SQL).

2. Habilite a autenticação do usuário para seu aplicativo

Você habilita a autenticação com o Microsoft Entra ID como o provedor de identidade. Para obter mais informações, consulte Configurar a autenticação do Microsoft Entra para seu aplicativo dos Serviços de Aplicativo.

  1. No menu do portal do Azure, selecione Grupos de recursos ou procure e selecione Grupos de recursos em qualquer página.

  2. Em Grupos de recursos, localize e selecione o seu grupo de recursos e, em seguida, selecione a sua aplicação.

  3. No menu esquerdo da sua aplicação, selecione Autenticação e, em seguida, selecione Adicionar fornecedor de identidade.

  4. Na página Adicionar um provedor de identidade, selecione Microsoft como o provedor de identidade para entrar nas identidades Microsoft e Microsoft Entra.

  5. Aceite as configurações padrão e selecione Adicionar.

    Captura de tela mostrando a página adicionar provedor de identidade.

Gorjeta

Se você encontrar erros e reconfigurar as configurações de autenticação do aplicativo, os tokens no repositório de tokens não poderão ser regenerados a partir das novas configurações. Para garantir que os tokens são regenerados, tem de terminar sessão e reiniciá-la na aplicação. Uma forma fácil de fazê-lo é utilizar o browser no modo privado e fechá-lo e reabri-lo no modo privado depois de alterar as definições nas suas aplicações.

3. Configurar a representação do usuário para o Banco de dados SQL

Atualmente, seu aplicativo do Azure se conecta ao Banco de Dados SQL usando autenticação SQL (nome de usuário e senha) gerenciada como configurações do aplicativo. Nesta etapa, você concede ao aplicativo permissões para acessar o Banco de dados SQL em nome do usuário conectado do Microsoft Entra.

  1. Na página Autenticação do aplicativo, selecione o nome do aplicativo em Provedor de identidade. Este registro de aplicativo foi gerado automaticamente para você. Selecione Permissões de API no menu à esquerda.

  2. Selecione Adicionar uma permissão e, em seguida, selecione APIs que minha organização usa.

  3. Digite Banco de Dados SQL do Azure na caixa de pesquisa e selecione o resultado.

  4. Na página Solicitar permissões de API para o Banco de Dados SQL do Azure, selecione Permissões delegadas e user_impersonation e, em seguida, selecione Adicionar permissões.

    Captura de tela da página Solicitar permissões da API mostrando Permissões delegadas, user_impersonation e o botão Adicionar permissão selecionado.

4. Configurar o Serviço de Aplicativo para retornar um token de acesso utilizável

O registro do aplicativo no Microsoft Entra ID agora tem as permissões necessárias para se conectar ao Banco de dados SQL representando o usuário conectado. Em seguida, você configura seu aplicativo do Serviço de Aplicativo para fornecer um token de acesso utilizável.

No Cloud Shell, execute os seguintes comandos no aplicativo para adicionar o scope parâmetro à configuração identityProviders.azureActiveDirectory.login.loginParametersde autenticação. Ele usa [jq] para processamento JSON, que já está instalado no Cloud Shell.

authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"

Os comandos efetivamente adicionam uma loginParameters propriedade com escopos personalizados extras. Aqui está uma explicação dos escopos solicitados:

  • openid, profilee email já são solicitados pelo Serviço de Aplicativo por padrão. Para obter informações, consulte Escopos do OpenID Connect.
  • https://database.windows.net/user_impersonation refere-se ao Banco de Dados SQL do Azure. É o escopo que fornece um token JWT que inclui o Banco de dados SQL como um público de token.
  • offline_access está incluído aqui para conveniência (caso você queira atualizar tokens).

Gorjeta

Para configurar os escopos necessários usando uma interface da Web, consulte as etapas da Microsoft em Atualizar tokens de autenticação.

As suas aplicações estão agora configuradas. O aplicativo agora pode gerar um token que o Banco de dados SQL aceita.

5. Use o token de acesso no código do seu aplicativo

As etapas que você segue para seu projeto dependem se você está usando o Entity Framework (padrão para ASP.NET) ou o Entity Framework Core (padrão para ASP.NET Core).

  1. No Visual Studio, abra o Console do Gerenciador de Pacotes e atualize o Entity Framework:

    Update-Package EntityFramework
    
  2. Em seu objeto DbContext (em Models/MyDbContext.cs), adicione o seguinte código ao construtor padrão.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    conn.AccessToken = System.Web.HttpContext.Current.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    

Nota

O código adiciona o token de acesso fornecido pela autenticação do Serviço de Aplicativo ao objeto de conexão.

Esta alteração de código não funciona localmente. Para obter mais informações, consulte Como depurar localmente ao usar a autenticação do Serviço de Aplicativo?.

6. Publique as alterações

  1. Se você veio de Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL, você define uma cadeia de conexão no Serviço de Aplicativo usando a autenticação SQL, com um nome de usuário e senha. Use o comando a seguir para remover os segredos de conexão, mas substitua group-name>,< app-name>,< db-server-name> e <db-name> pelo seu.<

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings MyDbConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    
  2. Publique suas alterações no Visual Studio. No Explorador de Soluções, clique com o botão direito do rato no projeto DotNetAppSqlDb e selecione Publicar.

    Captura de tela mostrando como publicar a partir do Gerenciador de Soluções no Visual Studio.

  3. Na página de publicação, selecione Publicar.

Quando a nova página da Web mostra sua lista de tarefas, seu aplicativo está se conectando ao banco de dados em nome do usuário conectado do Microsoft Entra.

Aplicativo do Azure após a migração do Code First

Agora, deverá conseguir editar a lista de tarefas como antes.

7. Limpar os recursos

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se achar que não vai precisar destes recursos no futuro, execute o seguinte comando no Cloud Shell para eliminar o grupo de recursos:

az group delete --name <group-name>

Este comando pode demorar alguns minutos a ser executado.

Perguntas mais frequentes

Por que recebo um Login failed for user '<token-identified principal>'. erro?

As causas mais comuns deste erro são:

Como faço para adicionar outros usuários ou grupos do Microsoft Entra no Banco de Dados SQL do Azure?

  1. Conecte-se ao servidor de banco de dados, como com sqlcmd ou SSMS.

  2. Crie usuários contidos mapeados para identidades do Microsoft Entra na documentação do Banco de dados SQL.

    O exemplo Transact-SQL a seguir adiciona uma identidade do Microsoft Entra ao SQL Server e fornece algumas funções de banco de dados:

    CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
    GO
    

Como faço para depurar localmente ao usar a autenticação do Serviço de Aplicativo?

Como a autenticação do Serviço de Aplicativo é um recurso no Azure, não é possível que o mesmo código funcione em seu ambiente local. Ao contrário do aplicativo em execução no Azure, seu código local não se beneficia do middleware de autenticação do Serviço de Aplicativo. Você tem algumas alternativas:

  • Conecte-se ao Banco de Dados SQL a partir do seu ambiente local com Active Directory Interactiveo . O fluxo de autenticação não conecta o usuário ao aplicativo em si, mas se conecta ao banco de dados back-end com o usuário conectado e permite que você teste a autorização do banco de dados localmente.
  • Copie manualmente o token de acesso para https://<app-name>.azurewebsites.net/.auth/me o seu código, no lugar do X-MS-TOKEN-AAD-ACCESS-TOKEN cabeçalho da solicitação.
  • Se você implantar a partir do Visual Studio, use a depuração remota do seu aplicativo do Serviço de Aplicativo.

O que acontece quando os tokens de acesso expiram?

O token de acesso expira ao fim de algum tempo. Para obter informações sobre como atualizar seus tokens de acesso sem exigir que os usuários se autentiquem novamente com seu aplicativo, consulte Atualizar tokens de provedor de identidade.

Próximos passos

O que aprendeu:

  • Habilitar a autenticação interna para o Banco de Dados SQL do Azure
  • Desabilitar outras opções de autenticação no Banco de Dados SQL do Azure
  • Ativar a autenticação do Serviço de Aplicações
  • Usar o Microsoft Entra ID como o provedor de identidade
  • Acessar o Banco de Dados SQL do Azure em nome do usuário conectado do Microsoft Entra