アプリケーションにアプリ ロールを追加してトークンで受け取る

ロールベースのアクセス制御 (RBAC) は、アプリケーションにおいて承認を実施する一般的なメカニズムです。 RBAC を使用すると、管理者は特定のユーザーまたはグループに対してではなく、ロールに対してアクセス許可を付与できます。 その後、管理者はロールをさまざまなユーザーやグループに割り当てて、コンテンツや機能にだれがアクセスできるかを制御できます。

RBAC をアプリケーション ロールおよびロール要求と一緒に使用すると、開発者はあまり手間をかけずにアプリでの承認を確実に行うことができます。

もう 1 つの方法として、GitHub 上の active-directory-aspnetcore-webapp-openidconnect-v2 コード サンプルで示されているように、Azure Active Directory (Azure AD) グループおよびグループ要求を使用することもできます。 Azure AD グループとアプリケーション ロールは相互に排他的ではありません。一緒に使用することで、さらにきめ細かいアクセス制御を提供できます。

アプリケーションのロールを宣言する

アプリのロールは、アプリの登録プロセス時に、Azure portal を 使用して定義します。 アプリのロールは、サービス、アプリ、または API を表すアプリケーション登録で定義されます。 ユーザーがアプリケーションにサインインすると、Azure AD によって、ユーザーまたはサービス プリンシパルに付与されたロール の roles 要求が生成されます。 これは要求ベースの承認を実装するために使用できます。 アプリ ロールはユーザーまたはユーザー グループに割り当てることができます。 アプリ ロールは、別のアプリケーションのサービス プリンシパルに割り当てたり、マネージド ID のサービス プリンシパルに割り当てたりすることもできます。

現在のところ、サービス プリンシパルをグループに追加し、その後、そのグループにアプリ ロールを割り当てる場合、Azure AD では、それが発行するトークンに roles 要求が追加されません。

アプリ ロールは、Azure portal のアプリ ロール UI を使用して宣言します。

追加するロールの数は、Azure AD によって適用されるアプリケーション マニフェストの制限に照らしてカウントされます。 このような制限については、Azure Active Directory のアプリ マニフェスト リファレンスに関するページの「マニフェストの制限」セクションを参照してください。

アプリ ロール UI

Azure portal のユーザー インターフェイスを使用してアプリ ロールを作成するには:

  1. Azure portal にサインインします。

  2. 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター を使用して、アプリ ロールの追加先のアプリ登録を含むテナントに切り替えます。

  3. Azure Active Directory を検索して選択します。

  4. [管理][アプリの登録] を選択し、アプリ ロールを定義するアプリケーションを選択します。

  5. [App roles](アプリ ロール) を選択して、 [Create app role](アプリ ロールの作成) を選択します。

    Azure portal の [アプリの登録] の [アプリのロール] ペイン

  6. [Create app role](アプリのロールの作成) ペインで、ロールの設定を入力します。 図の下の表では、各設定とそのパラメーターについて説明します。

    Azure portal の [アプリの登録] のアプリ ロールによって作成されるコンテキスト ペイン

    フィールド 説明
    表示名 管理者の同意やアプリの割り当て時に表示されるアプリのロールの表示名です。 この値にはスペースを含めることができます。 Survey Writer
    Allowed member types (許可されるメンバーの種類) このアプリのロールをユーザー、アプリケーション、またはその両方に割り当てることができるかどうかを指定します。

    applications から使用できる場合、アプリ ロールは、アプリの登録の [管理] セクション > [API のアクセス許可] > [アクセス許可の追加] > [自分の API] > [API を選択する] > [アプリケーションの許可] の下にアプリケーションのアクセス許可として表示されます。
    Users/Groups
    Value アプリケーション側でトークンに想定するロール要求の値を指定します。 この値は、アプリケーションのコードで参照される文字列と正確に一致する必要があります。 値にスペースを含めることはできません。 Survey.Create
    説明 管理者のアプリの割り当てと同意エクスペリエンスの間に表示されるアプリのロールの詳細な説明。 Writers can create surveys.
    Do you want to enable this app role? (このアプリのロールを有効にしますか?) アプリ ロールを有効にするかどうかを指定します。 アプリのロールを削除するには、このチェックボックスをオフにして、変更を適用してから削除操作を試行してください。 オン
  7. [適用] を選択して変更を保存します。

ロールにユーザーとグループを割り当てる

アプリケーションにアプリ ロールを追加したら、それらのロールにユーザーとグループを割り当てることができます。 ユーザーとグループのロールへの割り当ては、ポータルの UI を介して行うか、Microsoft Graph を使用してプログラミングによって行うことができます。 さまざまなアプリのロールに割り当てられたユーザーがアプリケーションにサインインすると、roles 要求で割り当てられたロールがトークンに付与されます。

Azure portal を使用してユーザーとグループをロールに割り当てるには:

  1. Azure portal にサインインします。
  2. Azure Active Directory の左側のナビゲーション メニューで [エンタープライズ アプリケーション] を選択します。
  3. [すべてのアプリケーション] を選択して、すべてのアプリケーションの一覧を表示します。 アプリケーションが一覧に表示されない場合は、 [すべてのアプリケーション] 一覧の上部にあるフィルターを使用して一覧を制限するか、一覧を下にスクロールしてアプリケーションを見つけます。
  4. ユーザーまたはグループをロールに割り当てるアプリケーションを選択します。
  5. [管理][ユーザーとグループ] を選択します。
  6. [ユーザーの追加] を選択し、 [割り当ての追加] ペインを開きます。
  7. [割り当ての追加] ウィンドウから [ユーザーとグループ] セレクターを選択します。 ユーザーとセキュリティ グループの一覧が表示されます。 特定のユーザーまたはグループを検索することや、一覧に表示される複数のユーザーやグループを選択することができます。
  8. ユーザーとグループを選択したら、 [選択] ボタンを選択して続行します。
  9. [割り当ての追加] ペインで [ロールの選択] を選択します。 アプリケーションに対して定義されているすべてのロールが表示されます。
  10. ロールを選択し、 [選択] ボタンを選択します。
  11. [割り当て] ボタンを選択して、アプリへのユーザーとグループの割り当てを完了します。

追加したユーザーとグループが [ユーザーとグループ] の一覧に表示されることを確認します。

アプリケーションへのアプリ ロールの割り当て

アプリケーションにアプリ ロールを追加したら、Azure portal を使用するか、Microsoft Graph を使用してプログラムでアプリ ロールをクライアント アプリに割り当てることができます。

アプリケーションにアプリ ロールを割り当てるときは、"アプリケーションのアクセス許可" を作成します。 通常、アプリケーションのアクセス許可は、認証および承認された API 呼び出しをユーザーによる操作なしで行う必要がある、デーモン アプリまたはバックエンド サービスによって使用されます。

Azure portal を使用してアプリケーションにアプリ ロールを割り当てるには:

  1. Azure portal にサインインします。
  2. Azure Active Directory の左側のナビゲーション メニューで [アプリの登録] を選択します。
  3. [すべてのアプリケーション] を選択して、すべてのアプリケーションの一覧を表示します。 アプリケーションが一覧に表示されない場合は、 [すべてのアプリケーション] 一覧の上部にあるフィルターを使用して一覧を制限するか、一覧を下にスクロールしてアプリケーションを見つけます。
  4. アプリ ロールを割り当てるアプリケーションを選択します。
  5. [API のアクセス許可][アクセス許可の追加] の順に選択します。
  6. [マイ API] タブを選択し、アプリ ロールを定義したアプリを選択します。
  7. [アプリケーションのアクセス許可] を選択します。
  8. 割り当てるロールを選択します。
  9. ロールの追加を完了するために、 [アクセス許可の追加] ボタンを選択します。

新しく追加されたロールは、アプリの登録の [API のアクセス許可] ペインに表示されます。

これらは委任されたアクセス許可ではなく、"アプリケーションのアクセス許可" であるため、アプリケーションに割り当てられたアプリ ロールの使用に管理者が同意を付与する必要があります。

  1. アプリの登録の [API のアクセス許可] ペインで、[<テナント名> に管理者の同意を与えます]を選択します。
  2. 要求されたアクセス許可への同意の付与を求めるメッセージが表示されたら、 [はい] を選択します。

[状態] 列には、同意が <テナント名> に付与されたことが反映されているはずです。

アプリ ロールの使用シナリオ

アプリケーションのシナリオでユーザーをサインインするアプリ ロールのビジネス ロジックを実装する場合は、最初にアプリの登録にアプリ ロールを定義します。 次に、管理者が [エンタープライズ アプリケーション] ペインでユーザーとグループに割り当てます。 これらの割り当て済みアプリ ロールは、アプリケーションに対して発行される任意のトークンに含められます。それらは、対象のアプリがアプリによって呼び出される API である場合のアクセス トークン、またはアプリでユーザーをサインインするときの ID トークンのいずれかです。

アプリ呼び出し API のシナリオでアプリ ロールのビジネス ロジックを実装している場合は、2 つのアプリ登録があります。 1 番目のアプリ登録はアプリ用であり、2 番目のアプリ登録は API 用です。 この場合は、アプリ ロールを定義して、API のアプリ登録でユーザーまたはグループに割り当てます。 ユーザーがアプリを使用して認証し、ID トークンを要求して API を呼び出すと、ロール要求が ID トークンに含められます。 次の手順は、API が呼び出されたときにこれらのロールを確認するコードを Web API に追加することです。

Web API に承認を追加する方法については、「保護された Web API: スコープとアプリのロールを検証する」を参照してください。

アプリ ロールとグループ

承認にはアプリ ロールまたはグループを使用できますが、両者の間の重要な違いは、実際のシナリオでどちらを使用するかの決定に影響する可能性があります。

アプリ ロール グループ
アプリケーションに固有のものであり、アプリの登録で定義されます。 これらはアプリケーションと共に移動します。 これらはアプリではなく、Azure AD テナントに固有のものです。
アプリ ロールは、アプリの登録が削除されると削除されます。 アプリが削除されても、グループはそのまま残ります。
roles 要求で提供されます。 groups 要求で提供されます。

開発者はアプリ ロールを使用して、ユーザーがアプリにサインインできるか、Web API のアクセス トークンをアプリで取得できるかを制御できます。 このセキュリティ制御をグループにまで拡張するために、開発者と管理者は、セキュリティ グループをアプリ ロールに割り当てることもできます。

開発者がアプリ自体に承認のパラメーターを記述して制御する必要がある場合は、アプリ ロールをお勧めします。 たとえば、承認にグループを使用するアプリは、グループ ID と名前の両方が異なる可能性があるため、次のテナントで中断されます。 アプリ ロールを使用するアプリは安全なままです。 実際、アプリ ロールにグループを割り当てることは、SaaS アプリが複数のテナントにプロビジョニングされることを許可するのと同じ理由で、SaaS アプリでも一般的です。

次のステップ

アプリ ロールの詳細については、次のリソースを参照してください。