ロールベースのアクセス制御を実装する方法

ロールベースのアクセス制御 (RBAC) を使用すると、ユーザーまたはグループに、リソースにアクセスして管理するための特定のアクセス許可を付与できます。 一般に、RBAC を実装してリソースを保護することには、Web アプリケーション、シングルページ アプリケーション (SPA)、または API を保護することが含まれます。 この保護は、アプリケーションまたは API 全体、特定の領域と機能、あるいは API メソッドを対象にすることができます。 認可の基本の詳細については、「承認の基本」を参照してください。

アプリケーション開発者向けのロールベースのアクセス制御」で説明したように、Microsoft ID プラットフォームを使用して RBAC を実装するには、次の 3 つの方法があります。

  • アプリ ロール – アプリケーション内のロジックを使用するアプリケーションのアプリ ロール機能を使用して、受信したアプリ ロールの割り当てを解釈します。
  • グループ – アプリケーション内のロジックを使用する受信 ID のグループ割り当てを使用して、グループ割り当てを解釈します。
  • カスタム データ ストア – アプリケーション内のロジックを使用して、ロールの割り当てを取得して解釈します。

アプリ ロールは実装が最も簡単なため、これを使用することをお勧めします。 このアプローチは、Microsoft ID プラットフォームを利用するアプリの構築に使用される SDK によって直接サポートされています。 アプローチの選択方法について詳しくは、「アプローチの選択」を参照してください。

アプリ ロールを定義する

アプリケーションに RBAC を実装するための最初の手順は、アプリケーション用のアプリ ロールを定義し、ユーザーまたはグループをそれに割り当てることです。 このプロセスの概要は、「方法: アプリケーションにアプリ ロールを追加してトークンで受け取る」に記載されています。 アプリ ロールを定義し、それらにユーザーまたはグループを割り当てた後、アプリケーションに送信されるトークンでロール割り当てにアクセスし、それらを適宜操作します。

ASP.NET Core で RBAC を実装する

ASP.NET Core では、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 で RBA を実装するには多くの場合、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 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 を実装するには、アプリケーション内に含まれる Angular ルートへのアクセスを認可するために、Angular 用 Microsoft Authentication Library を使用する必要があります。 例は、 MSAL Angular v3 サンプルに示されています。

Note

クライアント側 RBAC の実装では、認可されていないアプリケーションによる機密性の高いリソースへのアクセスを防ぐために、サーバー側 RBAC と組み合わせる必要があります。

Express アプリケーションを使用する Node.js

Express アプリケーションを使用して Node.js に RBAC を実装するには、アプリケーション内に含まれる Express ルートへのアクセスを認可するために MSAL を使用する必要があります。 Node.js Web アプリで、Microsoft ID プラットフォームを使用してユーザーをサインインできるようにし、かつ API を呼び出せるようにすることを示すサンプルで例が示されています。

次のステップ