实现基于角色的访问控制

基于角色的访问控制 (RBAC) 允许用户或组拥有访问和管理资源的特定权限。 通常,实现 RBAC 保护资源的方法包括保护 Web 应用程序、单页应用程序 (SPA) 或 API。 这种保护可以针对整个应用程序或 API、特定的区域和功能或 API 方法。 有关授权基础知识的详细信息,请参阅授权基础知识

应用程序开发人员的基于角色的访问控制中所述,有三种方法可以使用 Microsoft 标识平台实现 RBAC:

  • 应用角色 - 使用应用程序中的逻辑,通过应用程序中的应用角色功能来解释传入的应用角色分配。
  • - 使用应用程序中的逻辑,通过传入标识的组分配来解释组分配。
  • 自定义数据存储 - 使用应用程序中的逻辑检索和解释角色分配。

首选方法是使用应用角色,因为这种方法最容易实现。 此方法由使用 Microsoft 标识平台生成应用的 SDK 直接支持。 有关如何选择方法的详细信息,请参阅选择方法

定义应用角色

为应用程序实现 RBAC 的第一步是为该应用程序定义应用角色并分配用户或组。 如何:在应用程序中添加应用角色并在令牌中接收它们中概述了此过程。 定义应用角色并为其分配用户或组后,在传入应用程序的令牌中访问角色分配并相应地对其执行操作。

在 ASP.NET Core 中实现 RBAC

ASP.NET Core 支持将 RBAC 添加到 ASP.NET Core Web 应用程序或 Web API。 添加 RBAC 可以结合使用角色检查和 ASP.NET Core Authorize 特性来轻松实现 RBAC。 还可以使用 ASP.NET Core 对基于策略的角色检查的支持。

ASP.NET Core MVC Web 应用程序

在 ASP.NET Core MVC Web 应用程序中实现 RBAC 非常简单。 它主要涉及使用 Authorize 特性来指定应允许哪些角色访问特定控制器或控制器中的操作。 按照以下步骤在 ASP.NET Core MVC 应用程序中实现 RBAC:

  1. 如前面的“定义应用角色”中所述,使用应用角色和分配创建应用程序注册。

  2. 执行以下步骤中的一个:

    • 使用 dotnet cli 创建新的 ASP.NET Core MVC Web 应用程序项目。 指定包含单租户身份验证的 SingleOrg 或多租户身份验证的 MultiOrg--auth 标志,如果来自应用程序注册,则指定包含客户端的 --client-id 标志,如果来自 Microsoft Entra 租户,则指定包含租户的 --tenant-id 标志:

      dotnet new mvc --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID>  
      
    • 将 Microsoft.Identity.Web 和 Microsoft.Identity.Web.UI 库添加到现有 ASP.NET Core MVC 项目:

      dotnet add package Microsoft.Identity.Web 
      dotnet add package Microsoft.Identity.Web.UI 
      
  3. 按照快速入门:向 ASP.NET Core Web 应用添加 Microsoft 登录功能中指定的说明向应用程序添加身份验证。

  4. 添加角色检查中所述,对控制器操作添加角色检查。

  5. 通过尝试访问其中一个受保护的 MVC 路由来测试应用程序。

ASP.NET Core Web API

在 ASP.NET Core Web API 中实现 RBAC 主要涉及使用 Authorize 特性来指定应允许哪些角色访问特定控制器或控制器中的操作。 按照以下步骤在 ASP.NET Core Web API 中实现 RBAC:

  1. 如前面的“定义应用角色”中所述,使用应用角色和分配创建应用程序注册。

  2. 执行以下步骤中的一个:

    • 使用 dotnet cli 创建新的 ASP.NET Core MVC Web API 项目。 指定包含单租户身份验证的 SingleOrg 或多租户身份验证的 MultiOrg--auth 标志,如果来自应用程序注册,则指定包含客户端的 --client-id 标志,如果来自 Microsoft Entra 租户,则指定包含租户的 --tenant-id 标志:

      dotnet new webapi --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID> 
      
    • 将 Microsoft.Identity.Web 和 Swashbuckle.AspNetCore 库添加到现有 ASP.NET Core MVC Web API 项目:

      dotnet add package Microsoft.Identity.Web
      dotnet add package Swashbuckle.AspNetCore 
      
  3. 按照快速入门:向 ASP.NET Core Web 应用添加 Microsoft 登录功能中指定的说明向应用程序添加身份验证。

  4. 添加角色检查中所述,对控制器操作添加角色检查。

  5. 从客户端应用程序调用 API。 有关端到端示例,请参阅调用 ASP.NET Core Web API 并使用应用角色实现基于角色的访问控制的 Angular 单页应用程序

在其他平台中实现 RBAC

Angular SPA

在 Angular SPA 中实现 RBAC 涉及使用 Microsoft Authentication Library for Angular 授予对应用程序中包含的 Angular 路由的访问权限。 MSAL Angular v3 示例中显示了一个示例。

注意

客户端 RBAC 实现应与服务器端 RBAC 配对,以防止未经授权的应用程序访问敏感资源。

使用 Express 应用程序的 Node.js

在使用 Express 应用程序的 Node.js 中实现 RBAC 涉及使用 MSAL 授予对应用程序中包含的 Express 路由的访问权限。 通过 Microsoft 标识平台,使 Node.js Web 应用能够登录用户和调用 API 示例演示了此操作。

后续步骤