共用方式為


實作角色型存取控制

角色型存取控制 (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] 屬性來實作。 您也可以使用 ASP.NET Core 的支援來進行原則型角色檢查

ASP.NET Core MVC Web 應用程式

在 ASP.NET Core MVC Web 應用程式中實作 RBAC 的方法很簡單。 其主要涉及使用授權屬性來指定應該允許哪些角色存取特定控制器或控制器中的動作。 請遵循下列步驟以在 ASP.NET Core MVC 應用程式中實作 RBAC:

  1. 使用應用程式角色和指派來建立應用程式註冊,如上方的定義應用程式角色所述。

  2. 執行下列其中一個步驟:

    • 使用 dotnet cli 建立新的 ASP.NET Core MVC Web 應用程式專案。 指定 --auth 旗標並搭配 SingleOrg (若為單一租用戶驗證) 或 MultiOrg (若為多租用戶驗證)、指定 --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 主要涉及使用授權屬性來指定應該允許哪些角色存取特定控制器或控制器中的動作。 遵循下列步驟以在 ASP.NET Core Web API 中實作 RBAC:

  1. 使用應用程式角色和指派來建立應用程式註冊,如上方的定義應用程式角色所述。

  2. 執行下列其中一個步驟:

    • 使用 dotnet cli 建立新的 ASP.NET Core MVC Web API 專案。 指定 --auth 旗標並搭配 SingleOrg (若為單一租用戶驗證) 或 MultiOrg (若為多租用戶驗證)、指定 --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。 請參閱會呼叫 ASP.NET Core Web API 並使用應用程式角色來實作角色型存取控制的 Angular 單頁應用程式,以取得端對端範例。

在其他平台中實作 RBAC

Angular SPA

在 Angular SPA 中實作 RBAC 時,會使用 Microsoft Authentication Library for Angular,來授權存取應用程式內所包含的 Angular 路由。 MSAL Angular v3 範例會顯示一個範例。

注意

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

Node.js 搭配 Express 的應用程式

在 Node.js 搭配 Express 的應用程式中實作 RBAC 涉及使用 MSAL 來授權存取應用程式內所包含的 Express 路由。 在讓 Node.js Web 應用程式能夠使用 Microsoft 身分識別平台來登入使用者和呼叫 API 樣本中會顯示範例。

下一步