Partilhar via


Tutorial: Conectar um aplicativo do 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 back-end representando o usuário conectado, também chamado de fluxo em nome de. Para configurar esse fluxo, habilite a autenticação interna do Serviço de Aplicativo usando o provedor de identidade 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 com serviços back-end, assim como a abordagem de identidade gerenciada.
  • Dá 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 ao usuário conectado.

Neste tutorial, você adiciona a autenticação do Microsoft Entra a um aplicativo Web .NET que tem um back-end do Banco de Dados SQL do Azure. Você aprende a:

  • Habilite a autenticação do Microsoft Entra para o Banco de Dados SQL do Azure.
  • Desative outras opções de autenticação do Banco de dados SQL.
  • Adicione o Microsoft Entra ID 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 seu 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 cenário tutorial.

Nota

  • O Microsoft Entra ID não é suportado para o SQL Server local.
  • A autenticação do Microsoft Entra é diferente da autenticação integrada do Windows nos Serviços de Domínio (DS) do Ative Directory (AD) local. 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.

Pré-requisitos

1. Configurar o servidor de banco de dados com autenticação 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 servidor SQL do Azure. O administrador do Microsoft Entra deve ser um usuário criado, importado, sincronizado ou convidado para o Microsoft Entra ID. 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 do Microsoft Entra ID como administrador do servidor SQL 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 do Microsoft Entra ID que você deseja tornar administrador. Por exemplo, o comando a seguir lista informações para um usuário do Microsoft Entra ID com o display-name de Sobrenome de Nome.

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

    Copie o id valor da saída para usar na próxima etapa.

    Gorjeta

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

  2. Adicione o usuário do Microsoft Entra ID como administrador em seu servidor SQL do Azure usando az sql server ad-admin create com 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 sufixo .database.windows.net 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 a autenticação do servidor de banco de dados somente à autenticação do Microsoft Entra. Esta etapa desabilita a autenticação de nome de usuário e senha do SQL.

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

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

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

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

  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 Microsoft como provedor.

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

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

    Captura de ecrã que mostra a página de adicionar provedor de identidade.

Nota

Se você reconfigurar as configurações de autenticação do aplicativo, os tokens no repositório de tokens podem não ser regenerados a partir das novas configurações. Para garantir que seus tokens se regenerem, 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 do usuário do Banco de dados SQL

Conceda permissões ao seu 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 em Provedor de identidade.

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

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

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

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

  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, marque a caixa de seleção ao lado de user_impersonation e 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. Configurar 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 ao provedor Microsoft Entra do loginParametersaplicativo. O comando a seguir adiciona a propriedade com escopos loginParameters personalizados às configurações do provedor de login identidade do Microsoft Entra.

Dos escopos solicitados, o Serviço de Aplicativo já solicita openide emailprofileos escopos por padrão. O offline_access escopo está 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 JSON Web Token (JWT) que especifica o Banco de Dados SQL como o destinatário do token. Este comando é usado 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"

Gorjeta

Para configurar o escopo necessário usando uma interface Web em vez da CLI do Azure, use Configurar o provedor 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.

Nota

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 se autentiquem novamente com seu aplicativo, consulte Atualizar tokens de autenticação.

5. Use o token de acesso no código do seu 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.

Nota

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

  1. Em seu objeto em DatabaseContext.csDbContext ou outro arquivo que configure o contexto do banco de dados, altere o construtor padrão para adicionar o token de acesso do Microsoft Entra ID 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 de conexão. Substitua <group-name>, <app-name>, <db-server-name>, e <db-name> pelos 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 as alterações

Se você usou o Visual Studio Code no navegador para fazer alterações de código na 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.

O commit desencadeia uma implantação do GitHub Actions para o App Service. Aguarde alguns minutos até que a implantação seja concluída.

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 seu código estiver no Visual Studio:

  1. Clique com o botão direito do mouse em seu 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 página do novo 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 ecrã que mostra a aplicação Web após a publicação.

7. Limpar os recursos

Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Quando não precisar mais desses recursos, exclua o grupo de recursos executando o seguinte comando:

az group delete --name <group-name>

Este comando pode levar algum tempo para ser executado.

Perguntas mais frequentes

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

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

Como faço 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 contidos mapeados para identidades do Microsoft Entra.

O exemplo 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 faço para depurar localmente ao usar a autenticação do App Service?

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 a partir do seu ambiente local com Active Directory Interactive autenticação. Esse fluxo de autenticação não entra no usuário em si, mas se conecta ao banco de dados 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 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.