Share via


實作角色型存取控制

角色型訪問控制 (RBAC) 可讓使用者或群組具有存取和管理資源的特定許可權。 一般而言,實作 RBAC 來保護資源包括保護 Web 應用程式、單頁應用程式 (SPA) 或 API。 此保護適用於整個應用程式或 API、特定領域和功能,或 API 方法。 如需授權基本概念的詳細資訊,請參閱 授權基本概念

如應用程式開發人員的角色型訪問控制中所述,有三種方式可以使用 Microsoft 身分識別平台 來實作 RBAC:

  • 應用程式角色 – 在應用程式中使用應用程式邏輯來解譯傳入應用程式角色指派的應用程式角色功能。
  • 群組 – 使用應用程式內的邏輯來解譯群組指派的傳入身分識別。
  • 自定義數據存放區 – 使用應用程式內的邏輯來擷取和解譯角色指派。

慣用的方法是使用 應用程式角色 ,因為它是最容易實作的方法。 使用 Microsoft 身分識別平台 建置應用程式時,會直接支援此方法。 如需如何選擇方法的詳細資訊,請參閱 選擇方法

定義應用程式角色

為應用程式實作 RBAC 的第一個步驟是為其定義應用程式角色,並將使用者或群組指派給應用程式。 此程式概述 於如何:將應用程式角色新增至您的應用程式,並在令牌中接收它們。 定義應用程式角色並將使用者或群組指派給他們之後,請存取令牌中傳入應用程式的角色指派,並據以採取行動。

在 ASP.NET Core 中實作 RBAC

ASP.NET Core 支援將 RBAC 新增至 ASP.NET Core Web 應用程式或 Web API。 新增 RBAC 可讓您輕鬆地實作,方法是搭配 ASP.NET Core Authorize 屬性使用角色檢查 您也可以使用 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 應用程式專案。 使用 單--auth一租用戶驗證或MultiOrg多重租用戶驗證指定 旗標SingleOrg--client-id如果來自應用程式註冊,則為用戶端旗標,以及--tenant-id來自 Microsoft Entra 租使用者的旗標:

      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. 請遵循快速入門:將與 Microsoft 登入新增至 ASP.NET Core Web 應用程式中的指示,將驗證新增至應用程式。

  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 專案。 使用 單--auth一租用戶驗證或MultiOrg多重租用戶驗證指定 旗標SingleOrg--client-id如果來自應用程式註冊,則為用戶端旗標,以及--tenant-id來自 Microsoft Entra 租使用者的旗標:

      dotnet new webapi --auth SingleOrg --client-id <YOUR-APPLICATION-CLIENT-ID> --tenant-id <TENANT-ID> 
      
    • 將 Microsoft.Identity.Web 和 Swashbuckle.AspNetCore 連結庫新增至現有的 ASP.NET Core Web API 專案:

      dotnet add package Microsoft.Identity.Web
      dotnet add package Swashbuckle.AspNetCore 
      
  3. 請遵循快速入門:將與 Microsoft 登入新增至 ASP.NET Core Web 應用程式中的指示,將驗證新增至應用程式。

  4. 如新增角色檢查中所述 ,在控制器動作上新增角色檢查

  5. 從用戶端應用程式呼叫 API。 如需端對端範例,請參閱 Angular 單頁應用程式呼叫 ASP.NET Core Web API 和使用應用程式角色實作角色型 存取控制

在其他平台上實作 RBAC

使用 MsalGuard 的 Angular SPA

在 Angular SPA 中實作 RBAC 牽涉到使用 Microsoft Authentication Library for Angular 來授權存取應用程式內所包含的 Angular 路由。 範例會顯示在啟用 Angular 單頁應用程式中,以使用 Microsoft 身分識別平台 範例登入使用者和呼叫 API。

注意

用戶端 RBAC 實作應該與伺服器端 RBAC 配對,以防止未經授權的應用程式存取敏感性資源。

使用 Express 應用程式Node.js

在與快速應用程式的Node.js中實作 RBAC 牽涉到使用 MSAL 來授權存取應用程式內所含的 Express 路由。 範例會顯示在啟用 web 應用程式以使用 Node.js Microsoft 身分識別平台 範例來登入使用者和呼叫 API。

下一步