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:
- Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL do Azure
- Tutorial: Criar um aplicativo ASP.NET Core e do Banco de Dados SQL do Azure no Serviço de Aplicativo do Azure
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.
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:
- Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL
- Tutorial: Criar um aplicativo ASP.NET Core e Banco de Dados SQL no Serviço de Aplicativo do Azure.
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. | |
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. | |
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. |
Para usar o Azure Cloud Shell:
Inicie o Cloud Shell.
Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.
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.
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.
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.
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
.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
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.
No menu do portal do Azure, selecione Grupos de recursos ou procure e selecione Grupos de recursos em qualquer página.
Em Grupos de recursos, localize e selecione o seu grupo de recursos e, em seguida, selecione a sua aplicação.
No menu esquerdo da sua aplicação, selecione Autenticação e, em seguida, selecione Adicionar fornecedor de identidade.
Na página Adicionar um provedor de identidade, selecione Microsoft como o provedor de identidade para entrar nas identidades Microsoft e Microsoft Entra.
Aceite as configurações padrão e selecione Adicionar.
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.
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.
Selecione Adicionar uma permissão e, em seguida, selecione APIs que minha organização usa.
Digite Banco de Dados SQL do Azure na caixa de pesquisa e selecione o resultado.
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.
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.loginParameters
de 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
,profile
eemail
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).
No Visual Studio, abra o Console do Gerenciador de Pacotes e atualize o Entity Framework:
Update-Package EntityFramework
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
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>;"
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.
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.
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? - Como faço para adicionar outros usuários ou grupos do Microsoft Entra no Banco de Dados SQL do Azure?
- Como faço para depurar localmente ao usar a autenticação do Serviço de Aplicativo?
- O que acontece quando os tokens de acesso expiram?
Por que recebo um Login failed for user '<token-identified principal>'.
erro?
As causas mais comuns deste erro são:
- Você está executando o código localmente e não há nenhum token válido no cabeçalho da
X-MS-TOKEN-AAD-ACCESS-TOKEN
solicitação. Consulte Como depurar localmente ao usar a autenticação do Serviço de Aplicativo?. - A autenticação do Microsoft Entra não está configurada na Base de Dados SQL.
- O usuário conectado não tem permissão para se conectar ao banco de dados. Consulte Como adiciono outros usuários ou grupos do Microsoft Entra no Banco de Dados SQL do Azure?.
Como faço para adicionar outros usuários ou grupos do Microsoft Entra no Banco de Dados SQL do Azure?
Conecte-se ao servidor de banco de dados, como com sqlcmd ou SSMS.
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 Interactive
o . 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 doX-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