Compartilhar via


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

Este tutorial mostra como conectar um aplicativo do Serviço de Aplicativo do Azure a um banco de dados SQL do Azure de back-end representando o usuário conectado, também chamado de fluxo em nome. Para configurar esse fluxo, você habilita a autenticação interna do Serviço de Aplicativo usando o provedor de identidade do Microsoft Entra.

Esse método de conectividade é mais avançado do que a abordagem de identidade gerenciada no Tutorial: Acessar dados com identidade gerenciada e tem as seguintes vantagens em cenários corporativos:

  • Elimina segredos de conexão para serviços de back-end, assim como a abordagem de identidade gerenciada.
  • Fornece ao banco de dados back-end ou a outros serviços do Azure mais controle sobre quanto acesso conceder a quem.
  • Permite que o aplicativo adapte sua apresentação de dados para o usuário conectado.

Neste tutorial, você adicionará a autenticação do Microsoft Entra a um aplicativo Web .NET que tenha um back-end do Banco de Dados SQL do Azure. Você aprenderá como:

  • Habilite a autenticação do Microsoft Entra para o Banco de Dados SQL do Azure.
  • Desabilite outras opções de autenticação do Banco de Dados SQL.
  • Adicione a ID do Microsoft Entra como o provedor de identidade para seu aplicativo.
  • Configure a permissão de representação de usuário do Banco de Dados SQL.
  • Configure o Serviço de Aplicativo para fornecer um token de acesso utilizável para o Banco de Dados SQL.
  • Acesse o banco de dados SQL do Azure em nome do usuário conectado do Microsoft Entra.

Quando você conclui o tutorial, seu aplicativo se conecta com segurança ao Banco de Dados SQL em nome do usuário conectado.

Diagrama de arquitetura para o cenário do tutorial.

Observação

Pré-requisitos

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

Habilite a autenticação do Microsoft Entra para o banco de dados SQL do Azure atribuindo um usuário do Microsoft Entra como administrador do SQL Server do Azure. O administrador do Microsoft Entra deve ser um usuário que seja criado, importado, sincronizado ou convidado para a ID do Microsoft Entra. O usuário do Microsoft Entra pode não ser o mesmo que o usuário da conta da Microsoft para a assinatura do Azure.

Para adicionar o usuário da ID do Microsoft Entra como administrador do SQL Server do Azure, execute os seguintes comandos da CLI do Azure.

  1. Use az ad user list com o display-nameparâmetro , filterou upn para obter a ID do objeto para o usuário da ID do Microsoft Entra que você deseja tornar administrador. Por exemplo, o comando a seguir lista informações para um usuário da ID do Microsoft Entra com o display-name nome sobrenome.

    az ad user list --display-name "Firstname Lastname"
    

    Copie o id valor da saída a ser usada na próxima etapa.

    Dica

    Você pode executar az ad user list autônomo para mostrar informações para todos os usuários no diretório do Microsoft Entra.

  2. Adicione o usuário da ID do Microsoft Entra como administrador em seu SQL Server do Azure usando az sql server ad-admin create o object-id parâmetro. No comando a seguir, substitua <group-name> pelo nome do grupo de recursos do servidor, <server-name> pelo nome do servidor menos o .database.windows.net sufixo e <entra-id> pela id saída do comando anterior az ad user list .

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Restrinja somente a autenticação do servidor de banco de dados à autenticação do Microsoft Entra. Esta etapa desabilita o nome de usuário e a autenticação de senha do SQL.

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

2. Habilitar a autenticação da ID do Microsoft Entra para seu aplicativo

Adicione a ID do Microsoft Entra como um provedor de identidade para seu aplicativo. Para obter mais informações, consulte Configurar a autenticação do Microsoft Entra no seu aplicativo dos Serviços de Aplicativos.

  1. Na página do portal do Azure para seu aplicativo, selecione Autenticação em Configurações no menu de navegação à esquerda.

  2. Na página Autenticação , selecione Adicionar provedor de identidade ou selecione Adicionar provedor na seção Provedor de identidade .

  3. Na página Adicionar um provedor de identidade , selecione a Microsoft como provedor.

  4. Para a expiração do segredo do cliente, selecione uma das opções de lista suspensa, como Recomendado: 180 dias.

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

    Captura de tela mostrando a página Adicionar o provedor de identidade.

Observação

Se você reconfigurar as configurações de autenticação do aplicativo, os tokens no repositório de tokens poderão não ser regenerados das novas configurações. Para garantir que seus tokens se regenerizem, saia e entre novamente em seu aplicativo. Um método fácil é usar seu navegador no modo privado. Feche e reabra o navegador no modo privado depois de alterar as configurações em seus aplicativos.

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

Conceda permissões ao aplicativo 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 no provedor de identidade.

    A página de registro do aplicativo é aberta. Esse registro foi gerado automaticamente quando você adicionou o provedor do Microsoft Entra.

  2. Selecione permissões de API em Gerenciar no menu de navegação à esquerda.

  3. Na página de permissões de API , selecione Adicionar uma permissão.

  4. Na tela Solicitar permissões de API , selecione as APIs que minha organização usa a guia.

  5. Insira o Banco de Dados SQL do Azure na caixa de pesquisa e selecione o resultado.

  6. Em Que tipo de permissões seu aplicativo requer, selecione Permissões delegadas, selecione a caixa de seleção ao lado de 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.

O registro do aplicativo no Microsoft Entra agora tem as permissões necessárias para se conectar ao Banco de Dados SQL representando o usuário conectado.

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

Para configurar seu aplicativo para fornecer um token de acesso utilizável para o Banco de Dados SQL, adicione https://database.windows.net/user_impersonation como um scope provedor do Microsoft Entra loginParametersdo aplicativo. O comando a seguir adiciona a loginParameters propriedade com escopos personalizados às configurações do provedor login de identidade do Microsoft Entra.

Dos escopos solicitados, o Serviço de Aplicativo já solicita openidprofilee email escopos por padrão. O offline_access escopo é incluído para que você possa atualizar tokens. Para obter mais informações, consulte escopos do OpenID Connect.

O https://database.windows.net/user_impersonation escopo refere-se ao Banco de Dados SQL do Azure e fornece um JWT (Token Web JSON) que especifica o Banco de Dados SQL como o destinatário do token. Esse comando usa jq o 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"

Dica

Para configurar o escopo necessário usando uma interface da Web em vez da CLI do Azure, use Configurar o provedor do Microsoft Entra para fornecer tokens de atualização, adicionando https://database.windows.net/user_impersonation aos escopos solicitados.

Seu aplicativo agora está configurado para gerar um token de acesso aceito pelo Banco de Dados SQL.

Observação

Os tokens de acesso expiram após algum tempo. Para obter informações sobre como atualizar seus tokens de acesso sem exigir que os usuários reautentiquem com seu aplicativo, consulte Atualizar tokens de autenticação.

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

Atualize o código do aplicativo para adicionar o token de acesso fornecido pela autenticação do Serviço de Aplicativo ao objeto de conexão.

Observação

Esse código não funciona localmente. Para obter mais informações e alternativas para depuração local, consulte Depurar localmente quando você usar a autenticação do Serviço de Aplicativo.

  1. Em seu DbContext objeto no DatabaseContext.cs ou em outro arquivo que configura o contexto do banco de dados, altere o construtor padrão para adicionar o token de acesso da ID do Microsoft Entra ao objeto de conexão.

    public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor)
        : base(options)
    {
        var conn = Database.GetDbConnection() as SqlConnection;
        conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    }
    
  2. Se você tiver uma cadeia de conexão chamada defaultConnection no Serviço de Aplicativo que usa a autenticação SQL com um nome de usuário e senha, use o comando a seguir para remover os segredos da conexão. Substitua <group-name>, <app-name>, <db-server-name>e <db-name> com seus valores.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    

6. Publique suas alterações

Se você usou o Visual Studio Code no navegador para fazer alterações de código em sua bifurcação do GitHub, selecione Controle do Código-Fonte no menu à esquerda. Insira uma mensagem de confirmação como OBO connect e selecione Confirmar.

A confirmação dispara uma implantação de Ações do GitHub para Serviço de Aplicativo. Aguarde alguns minutos para a execução da implantação.

Você também pode publicar suas alterações no Git Bash usando os seguintes comandos:

git commit -am "configure managed identity"
git push azure main

Se o código estiver no Visual Studio:

  1. Clique com o botão direito do mouse no projeto no Gerenciador de Soluções e selecione Publicar.

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

  2. Na página Publicar , selecione Publicar.

Quando a nova página do aplicativo mostra seu aplicativo, o aplicativo está se conectando ao banco de dados SQL do Azure em nome do usuário conectado do Microsoft Entra. Você deve ser capaz de usar e editar seu aplicativo como de costume.

Captura de tela que mostra o aplicativo Web após a publicação.

7. Limpar os recursos

Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Quando você não precisar mais desses recursos, exclua o grupo de recursos executando o seguinte comando:

az group delete --name <group-name>

Esse comando pode levar algum tempo para ser executado.

Perguntas frequentes

Por que recebo um erro "Falha de logon para o usuário '<entidade de segurança> identificada por token'"?

As causas mais comuns para um Login failed for user '<token-identified principal>' erro são:

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

Para adicionar mais usuários ou grupos, conecte-se ao servidor de banco de dados usando sqlcmd ou SQL Server Management Studio (SSMS) e crie usuários de banco de dados independentes mapeados para identidades do Microsoft Entra.

O exemplo de Transact-SQL a seguir adiciona uma identidade do Microsoft Entra ao SQL Server e fornece à identidade 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 depurar localmente ao usar a autenticação do Serviço de Aplicativo?

Como a autenticação do Serviço de Aplicativo é um recurso do Azure, o código neste tutorial não funciona em seu ambiente local. Ao contrário de um 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ê pode usar as seguintes alternativas para depuração local:

  • Conecte-se ao Banco de Dados SQL do seu ambiente local com Active Directory Interactive autenticação. Esse fluxo de autenticação não entra no próprio usuário, mas se conecta ao banco de dados de back-end com o usuário conectado para que você possa testar a autorização do banco de dados localmente.
  • Copie manualmente o token de acesso em seu código no lugar do cabeçalho da solicitação X-MS-TOKEN-AAD-ACCESS-TOKEN .
  • Se você implantar por meio do Visual Studio, use a depuração remota do aplicativo Serviço de Aplicativo.

O que acontece quando os tokens de acesso expiram?

O token de acesso expira após algum tempo. Para obter informações sobre como atualizar seus tokens de acesso sem exigir que os usuários autentiquem novamente no aplicativo, confira Atualizar tokens do provedor de identidade.