Implementación del control de acceso basado en roles

El control de acceso basado en roles (RBAC) permite que los usuarios o grupos tengan permisos específicos para acceder y administrar recursos. Por lo general, con la implementación de RBAC para proteger un recurso se busca proteger una aplicación web, una aplicación de página única (SPA) o una API. Esta protección podría ser para toda la aplicación o API, áreas y características específicas, o bien métodos de API. Para más información acerca de los aspectos básicos de la autorización, consulte Conceptos básicos de autorización.

Como se describe en Control de acceso basado en rol para desarrolladores de aplicaciones, hay tres formas de implementar RBAC mediante la plataforma de identidad de Microsoft:

  • Roles de aplicación: uso de la característica Roles de aplicación en una aplicación mediante lógica dentro de la aplicación para interpretar las asignaciones entrantes de roles de aplicación.
  • Grupos: uso de las asignaciones de grupo de una identidad entrante mediante lógica dentro de la aplicación para interpretar las asignaciones de grupo.
  • Almacén de datos personalizado: recupere e interprete las asignaciones de roles mediante lógica en la aplicación.

El enfoque preferido es usar Roles de aplicación, ya que es el más fácil de implementar. Este enfoque es compatible directamente con los SDK que se usan en la creación de aplicaciones que usan la plataforma de identidad de Microsoft. Para obtener más información sobre cómo elegir un enfoque, consulte Elección de un enfoque.

Definición de roles para una aplicación

El primer paso para implementar RBCA en una aplicación es definir los roles para la aplicación y asignar usuarios o grupos a esos roles. Este proceso se describe en Procedimiento: Incorporación de roles de aplicación a una aplicación y su recepción en el token. Después de definir los roles de aplicación y asignarles usuarios o grupos, puede acceder a las asignaciones de roles en los tokens que entran en la aplicación y actúe en consecuencia.

Implementación del control de acceso basado en roles en ASP.NET Core

ASP.NET Core admite la adición del control de acceso basado en roles a una aplicación web ASP.NET Core web o una API web. La implementación del control de acceso basado en roles se realiza fácilmente mediante comprobaciones de roles con el atributo Authorize de ASP.NET Core. También es posible usar la compatibilidad de ASP.NET Core para las comprobaciones de roles basadas en directivas.

Aplicación web MVC de ASP.NET Core

Es sencillo implementar el control de acceso basado en roles en una aplicación web MVC de ASP.NET Core. Implica principalmente el uso del atributo Authorize para especificar a qué roles se les permite acceder a controladores concretos o a acciones en los controladores. Siga estos pasos para implementar RBAC en la aplicación MVC de ASP.NET Core:

  1. Cree un registro de aplicación con roles de aplicación y asignaciones, tal y como se describe en la sección Definición de roles para una aplicación.

  2. Realice uno de los siguientes pasos:

    • Cree un proyecto de aplicación web MVC de ASP.NET Core mediante la CLI de dotnet. Especifique la--auth marca con SingleOrg para la autenticación de inquilino único o MultiOrg para la autenticación multiinquilino. Especifique la marca --client-id con el cliente (si es desde el registro de la aplicación) y la marca --tenant-id con el inquilino (si es desde el inquilino de Microsoft Entra):

      dotnet new mvc --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID>  
      
    • Agregue las bibliotecas Microsoft.Identity.Web y Microsoft.Identity.Web.UI a un proyecto MVC de ASP.NET Core existente:

      dotnet add package Microsoft.Identity.Web 
      dotnet add package Microsoft.Identity.Web.UI 
      
  3. A continuación, siga las instrucciones especificadas en Inicio rápido: Agregar información de inicio de sesión con Microsoft a una aplicación web de ASP.NET Core para agregar autenticación a una aplicación.

  4. Agregue comprobaciones de roles a las acciones del controlador como se describe en Adición de comprobaciones de roles.

  5. Pruebe la aplicación, para lo que debe intentar acceder a una de las rutas de MVC protegidas.

API web de ASP.NET Core

La implementación del control de acceso basado en roles en una API web implica principalmente el uso del atributo Authorize para especificar a qué roles se les permite acceder a controladores concretos o a acciones en los controladores. Siga estos pasos para implementar el control de acceso basado en roles en la API web de ASP.NET Core:

  1. Cree un registro de aplicación con roles de aplicación y asignaciones, tal y como se describe en la sección Definición de roles para una aplicación.

  2. Realice uno de los siguientes pasos:

    • Cree un proyecto de la API web MVC de ASP.NET Core mediante la CLI de dotnet. Especifique la--auth marca con SingleOrg para la autenticación de inquilino único o MultiOrg para la autenticación multiinquilino. Especifique la marca --client-id con el cliente (si es desde el registro de la aplicación) y la marca --tenant-id con el inquilino (si es desde el inquilino de Microsoft Entra):

      dotnet new webapi --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID> 
      
    • Agregue las bibliotecas Microsoft.Identity.Web y Swashbuckle.AspNetCore a un proyecto de API web de ASP.NET Core existente:

      dotnet add package Microsoft.Identity.Web
      dotnet add package Swashbuckle.AspNetCore 
      
  3. A continuación, siga las instrucciones especificadas en Inicio rápido: Agregar información de inicio de sesión con Microsoft a una aplicación web de ASP.NET Core para agregar autenticación a una aplicación.

  4. Agregue comprobaciones de roles a las acciones del controlador como se describe en Adición de comprobaciones de roles.

  5. Llame a la API desde una aplicación cliente. Consulte el artículo sobre el hecho de que la aplicación de página única Angular llama a la API web de ASP.NET Core y usa Roles de aplicación para implementar el control de acceso basado en roles para obtener un ejemplo de un extremo a otro.

Implementación del control de acceso basado en roles en otras plataformas

Aplicación de página única Angular con MsalGuard

Implementar RBAC en una SPA de Angular implica usar la Biblioteca de autenticación de Microsoft para Angular para autorizar el acceso a las rutas de Angular contenidas en la aplicación. Esto se muestra en el ejemplo de habilitación de la aplicación de página única Angular para iniciar sesión a los usuarios y llamar a las API con la plataforma de identidad de Microsoft.

Nota

Las implementaciones del control de acceso basado en roles en el cliente deben emparejarse con el control de acceso basado en roles en el servidor para evitar que aplicaciones no autorizadas accedan a recursos confidenciales.

Aplicación Node.js con Express

La implementación del control de acceso basado en roles en la aplicación Node.js con Express implica el uso de MSAL para autorizar el acceso a las rutas de Express que contiene la aplicación. Esto se muestra en el ejemplo de habilitación de una aplicación web Node.js para iniciar sesión a los usuarios y llamar a las API con la plataforma de identidad de Microsoft.

Pasos siguientes