Implementar o controle de acesso baseado em função
O RBAC (controle de acesso baseado em função) permite que usuários ou grupos tenham permissões específicas para acessar e gerenciar recursos. Normalmente, a implementação do RBAC para proteger um recurso inclui a proteção de um aplicativo Web, um SPA (aplicativo de página única) ou uma API. Essa proteção pode ser para todo o aplicativo ou para toda a API, para áreas e recursos específicos ou para métodos de API. Para obter mais informações sobre os conceitos básicos da autorização, confira Noções básicas de autorização.
Conforme discutido em Controle de acesso baseado em função para desenvolvedores de aplicativos, há três maneiras de implementar o RBAC usando o plataforma de identidade da Microsoft:
- Funções de aplicativo: usando o recurso Funções de aplicativo em um aplicativo por meio da lógica no aplicativo para interpretar as atribuições de função do aplicativo.
- Grupos: usando atribuições de grupo de uma identidade de entrada por meio da lógica no aplicativo para interpretar as atribuições de grupo.
- Armazenamento de dados personalizado: recupere e interprete atribuições de função usando a lógica no aplicativo.
A abordagem preferencial é usar Funções de aplicativo, pois é a mais fácil de implementar. Essa abordagem tem suporte diretamente dos SDKs usados na criação de aplicativos utilizando o plataforma de identidade da Microsoft. Para obter mais informações sobre como escolher uma abordagem, confira Escolher uma abordagem.
Definir funções de aplicativos
A primeira etapa para a implementação do RBAC para um aplicativo é definir as funções do aplicativo para ele e atribuir usuários ou grupos a ele. Esse processo é descrito em Como: Adicionar funções de aplicativo ao seu aplicativo e recebê-las no token. Depois de definir as funções de aplicativos e atribuir usuários ou grupos a eles, acesse as atribuições de função nos tokens recebidos pelo aplicativo e tome medidas de acordo.
Implementar o RBAC no ASP.NET Core
O ASP.NET Core suporta a adição do RBAC a um aplicativo Web ou a uma API Web do ASP.NET Core. A adição do RBAC permite uma implementação fácil por meio de verificações de função com o atributo Autorizar do ASP.NET Core. Também é possível usar o suporte do ASP.NET Core para verificações de função baseadas em políticas.
Aplicativo Web MVC do ASP.NET Core
Implementar o RBAC em um aplicativo Web MVC do ASP.NET Core é simples. A implementação envolve principalmente o uso do atributo Autorizar para especificar quais funções devem ter permissão para acessar controladores ou ações específicos nos controladores. Siga estas etapas para implementar o RBAC em um aplicativo MVC ASP.NET Core:
Crie um registro de aplicativo com funções e atribuições de aplicativo, conforme descrito em Definir funções do aplicativo acima.
Siga uma das etapas a seguir:
Crie um projeto de aplicativo Web MVC ASP.NET Core usando a dotnet cli. Especifique o sinalizador
--auth
comSingleOrg
para a autenticação de locatário único ouMultiOrg
para a autenticação multilocatário, o sinalizador--client-id
com o cliente se for do registro do aplicativo e o sinalizador--tenant-id
com o locatário se for do locatário do Microsoft Entra:dotnet new mvc --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID>
Adicione as bibliotecas Microsoft.Identity.Web e Microsoft.Identity.Web.UI a um projeto MVC do ASP.NET Core existente:
dotnet add package Microsoft.Identity.Web dotnet add package Microsoft.Identity.Web.UI
Siga as instruções especificadas em Guia de Início Rápido: Adicionar a entrada com a Microsoft a um aplicativo Web ASP.NET Core para adicionar a autenticação ao aplicativo.
Adicione verificações de função nas ações do controlador, conforme descrito em Como adicionar verificações de função.
Teste o aplicativo tentando acessar uma das rotas MVC protegidas.
API Web do ASP.NET Core
Implementar o RBAC em uma API Web do ASP.NET Core envolve principalmente o uso do atributo Autorizar para especificar quais funções devem ter permissão para acessar controladores ou ações específicos nos controladores. Siga estas etapas para implementar o RBAC na API Web do ASP.NET Core:
Crie um registro de aplicativo com funções e atribuições de aplicativo, conforme descrito em Definir funções do aplicativo acima.
Siga uma das etapas a seguir:
Crie um novo projeto de API Web MVC do ASP.NET Core usando a dotnet cli. Especifique o sinalizador
--auth
comSingleOrg
para a autenticação de locatário único ouMultiOrg
para a autenticação multilocatário, o sinalizador--client-id
com o cliente se for do registro do aplicativo e o sinalizador--tenant-id
com o locatário se for do locatário do Microsoft Entra:dotnet new webapi --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID>
Adicione as bibliotecas Microsoft.Identity.Web e Swashbuckle.AspNetCore a um projeto de API Web do ASP.NET Core existente:
dotnet add package Microsoft.Identity.Web dotnet add package Swashbuckle.AspNetCore
Siga as instruções especificadas em Guia de Início Rápido: Adicionar a entrada com a Microsoft a um aplicativo Web ASP.NET Core para adicionar a autenticação ao aplicativo.
Adicione verificações de função nas ações do controlador, conforme descrito em Como adicionar verificações de função.
Chame a API em um aplicativo cliente. Consulte Aplicativo angular de página única chamando a ASP.NET Core Web API e usando Funções de Aplicativos para implementar o Controle de Acesso Baseado em Funções para obter uma amostra de ponta a ponta.
Implementar o RBAC em outras plataformas
Angular SPA
Implementar o RBAC em um SPA Angular envolve o uso de Biblioteca de Autenticação da Microsoft para Angular para autorizar o acesso às rotas angulares existentes no aplicativo. Um exemplo é mostrado nos Exemplos do MSAL Angular v3.
Observação
As implementações de RBAC do lado do cliente devem ser emparelhadas com o RBAC do lado do servidor para impedir que aplicativos não autorizados acessem recursos confidenciais.
Node.js com o aplicativo Express
Implementar o RBAC em um Node.js com o aplicativo Express envolve o uso de MSAL para autorizar o acesso às rotas expressas contidas no aplicativo. Um exemplo é mostrado em Habilitar o aplicativo Web Node.js para conectar usuários e chamar APIs com a plataforma de identidade da Microsoft.