アプリケーションにアプリ ロールを追加してトークンで受け取る
ロールベースのアクセス制御 (RBAC) は、アプリケーションにおいて承認を実施する一般的なメカニズムです。 RBAC を使用すると、管理者は特定のユーザーまたはグループに対してではなく、ロールに対してアクセス許可を付与できます。 その後、管理者はロールをさまざまなユーザーやグループに割り当てて、コンテンツや機能にだれがアクセスできるかを制御できます。
RBAC をアプリケーション ロールおよびロール要求と一緒に使用すると、開発者はあまり手間をかけずにアプリでの承認を確実に行うことができます。
もう 1 つの方法として、GitHub 上の active-directory-aspnetcore-webapp-openidconnect-v2 コード サンプルで示されているように、Azure Active Directory (Azure AD) グループおよびグループ要求を使用することもできます。 Azure AD グループとアプリケーション ロールは相互に排他的ではありません。一緒に使用することで、さらにきめ細かいアクセス制御を提供できます。
アプリケーションのロールを宣言する
アプリ ロールは、アプリの登録プロセス時に、[Microsoft Entra 管理センター] を使用して定義します。 アプリのロールは、サービス、アプリ、または API を表すアプリケーション登録で定義されます。 ユーザーがアプリケーションにサインインすると、Azure AD によって、ユーザーまたはサービス プリンシパルに付与されたロール の roles
要求が生成されます。 これは、クレームベースの認可を実装するために使用できます。 アプリ ロールはユーザーまたはユーザー グループに割り当てることができます。 アプリ ロールは、別のアプリケーションのサービス プリンシパルに割り当てたり、マネージド ID のサービス プリンシパルに割り当てたりすることもできます。
現在のところ、サービス プリンシパルをグループに追加し、その後、そのグループにアプリ ロールを割り当てる場合、Azure AD では、それが発行するトークンに roles
要求が追加されません。
アプリ ロールは、[Microsoft Entra 管理センター] のアプリ ロール UI を使用して宣言されます。
追加するロールの数は、Azure AD によって適用されるアプリケーション マニフェストの制限に照らしてカウントされます。 このような制限については、Azure Active Directory のアプリ マニフェスト リファレンスに関するページの「マニフェストの制限」セクションを参照してください。
アプリ ロール UI
ヒント
この記事の手順は、開始するポータルによって若干異なる場合があります。
[Microsoft Entra 管理センター] のユーザー インターフェイスを使用してアプリ ロールを作成するには次の手順に従ってください:
クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター
を使用して、アプリ ロールの追加先のアプリ登録を含むテナントに切り替えます。
[ID]>[アプリの登録]>[アプリの登録] の順に移動して、アプリ ロールを定義するアプリケーションを選択します。
[管理] で、[アプリ ロール] を選択して、[アプリ ロールの作成] を選択します。
[Create app role](アプリのロールの作成) ペインで、ロールの設定を入力します。 図の下の表では、各設定とそのパラメーターについて説明します。
フィールド 説明 例 表示名 管理者の同意やアプリの割り当て時に表示されるアプリのロールの表示名です。 この値にはスペースを含めることができます。 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? (このアプリのロールを有効にしますか?) アプリ ロールを有効にするかどうかを指定します。 アプリのロールを削除するには、このチェックボックスをオフにして、変更を適用してから削除操作を試行してください。 この設定は、アプリ ロールの使用状況と可用性を制御します。アプリ ロールは完全に削除するのではなく、一時的または永続的に無効にできます。 オン [適用] を選択して変更を保存します。
アプリ ロールが有効に設定されている場合、割り当てられているすべてのユーザー、アプリケーション、またはグループのトークンにはそのロールが含まれます。 これらのトークンは、アプリで API を呼び出す場合はアクセス トークンであり、アプリがユーザーのサインインを行う場合は ID トークンになります。 アプリ ロールを無効に設定すると、アプリ ロールは非アクティブになり、割り当てできなくなります。 以前の割り当て先のトークンにはアプリ ロールが含まれていますが、アクティブに割り当てできなくなったため無効になっています。
アプリケーションの所有者を割り当てる
まだ行っていない場合は、アプリケーション所有者として自分自身を割り当てる必要があります。
- アプリの登録の [管理] で、[所有者] を選択し、[所有者の追加] を選択します。
- 新しいウィンドウで、アプリケーションに割り当てる所有者を見つけて選びます。 選択した所有者が右側のパネルに表示されます。 完了したら、[選択] で確定します。 これで、アプリ所有者が所有者の一覧に表示されます。
注意
API アプリケーションとアクセス許可を追加するアプリケーションの両方に所有者がいるようにしてください。そうでないと、API のアクセス許可を要求するときに API が一覧表示されません。
ロールにユーザーとグループを割り当てる
アプリケーションにアプリ ロールを追加したら、それらのロールにユーザーとグループを割り当てることができます。 ユーザーとグループのロールへの割り当ては、ポータルの UI を介して行うか、Microsoft Graph を使用してプログラミングによって行うことができます。 さまざまなアプリのロールに割り当てられたユーザーがアプリケーションにサインインすると、roles
要求で割り当てられたロールがトークンに付与されます。
[Microsoft Entra 管理センター] を使用して、ユーザーとグループをロールに割り当てるには、次の手順に従ってください。
- クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
- 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター
を使用して、アプリ ロールの追加先のアプリ登録を含むテナントに切り替えます。
- ID>アプリケーション>エンタープライズ アプリケーション を参照します。
- [すべてのアプリケーション] を選択して、すべてのアプリケーションの一覧を表示します。 アプリケーションが一覧に表示されない場合は、 [すべてのアプリケーション] 一覧の上部にあるフィルターを使用して一覧を制限するか、一覧を下にスクロールしてアプリケーションを見つけます。
- ユーザーまたはグループをロールに割り当てるアプリケーションを選択します。
- [管理] で [ユーザーとグループ] を選択します。
- [ユーザーの追加] を選択し、 [割り当ての追加] ペインを開きます。
- [割り当ての追加] ウィンドウから [ユーザーとグループ] セレクターを選択します。 ユーザーとセキュリティ グループの一覧が表示されます。 特定のユーザーまたはグループを検索することや、一覧に表示される複数のユーザーやグループを選択することができます。
- ユーザーとグループを選択したら、 [選択] ボタンを選択して続行します。
- [割り当ての追加] ペインで [ロールの選択] を選択します。 アプリケーションに対して定義されているすべてのロールが表示されます。
- ロールを選択し、 [選択] ボタンを選択します。
- [割り当て] ボタンを選択して、アプリへのユーザーとグループの割り当てを完了します。
追加したユーザーとグループが [ユーザーとグループ] の一覧に表示されることを確認します。
アプリケーションへのアプリ ロールの割り当て
アプリケーションにアプリ ロールを追加したら、[Microsoft Entra 管理センター] を使用するか、Microsoft Graph を使用してプログラムでアプリ ロールをクライアント アプリに割り当てることができます。
アプリケーションにアプリ ロールを割り当てるときは、"アプリケーションのアクセス許可" を作成します。 通常、アプリケーションのアクセス許可は、認証および承認された API 呼び出しをユーザーによる操作なしで行う必要がある、デーモン アプリまたはバックエンド サービスによって使用されます。
[Microsoft Entra 管理センター] を使用して、アプリケーションにアプリロールを割り当てるには、次の手順に従ってください。
- クラウド アプリケーション管理者以上として Microsoft Entra 管理センターにサインインします。
- [ID]>[アプリケーション]>[アプリの登録] の順に移動して、[すべてのアプリケーション] を選択します。
- [すべてのアプリケーション] を選択して、すべてのアプリケーションの一覧を表示します。 アプリケーションが一覧に表示されない場合は、 [すべてのアプリケーション] 一覧の上部にあるフィルターを使用して一覧を制限するか、一覧を下にスクロールしてアプリケーションを見つけます。
- アプリ ロールを割り当てるアプリケーションを選択します。
- [API のアクセス許可] 、 [アクセス許可の追加] の順に選択します。
- [マイ API] タブを選択し、アプリ ロールを定義したアプリを選択します。
- [アプリケーションのアクセス許可] を選択します。
- 割り当てるロールを選択します。
- ロールの追加を完了するために、 [アクセス許可の追加] ボタンを選択します。
新しく追加されたロールは、アプリの登録の [API のアクセス許可] ペインに表示されます。
管理者の同意の付与
これらは委任されたアクセス許可ではなく、"アプリケーションのアクセス許可" であるため、アプリケーションに割り当てられたアプリ ロールの使用に管理者が同意を付与する必要があります。
- アプリの登録の [API のアクセス許可] ペインで、[<テナント名> に管理者の同意を与えます]を選択します。
- 要求されたアクセス許可への同意の付与を求めるメッセージが表示されたら、 [はい] を選択します。
[状態] 列には、同意が <テナント名> に付与されたことが反映されているはずです。
アプリ ロールの使用シナリオ
アプリケーションのシナリオでユーザーをサインインするアプリ ロールのビジネス ロジックを実装する場合は、最初にアプリの登録にアプリ ロールを定義します。 次に、管理者が [エンタープライズ アプリケーション] ペインでユーザーとグループに割り当てます。 これらの割り当てられたアプリ ロールは、アプリケーションに対して発行されるすべてのトークンに含まれます。
アプリ呼び出し API のシナリオでアプリ ロールのビジネス ロジックを実装している場合は、2 つのアプリ登録があります。 1 番目のアプリ登録はアプリ用であり、2 番目のアプリ登録は API 用です。 この場合は、アプリ ロールを定義して、API のアプリ登録でユーザーまたはグループに割り当てます。 ユーザーがアプリを使用して認証し、アクセス トークンを要求して API が呼び出されると、ロール要求がトークンに含められます。 次の手順は、API が呼び出されたときにこれらのロールを確認するコードを Web API に追加することです。
Web API に承認を追加する方法については、「保護された Web API: スコープとアプリのロールを検証する」を参照してください。
アプリ ロールとグループ
アプリのロールやグループを認可に使用することができますが、両者の主な違いは、あなたのシナリオに使用することを決定するのに影響します。
アプリ ロール | グループ |
---|---|
アプリケーションに固有のものであり、アプリの登録で定義されます。 これらはアプリケーションと共に移動します。 | これらはアプリではなく、Azure AD テナントに固有のものです。 |
アプリ ロールは、アプリの登録が削除されると削除されます。 | アプリが削除されても、グループはそのまま残ります。 |
roles 要求で提供されます。 |
groups 要求で提供されます。 |
開発者はアプリ ロールを使用して、ユーザーがアプリにサインインできるか、Web API のアクセス トークンをアプリで取得できるかを制御できます。 このセキュリティ制御をグループにまで拡張するために、開発者と管理者は、セキュリティ グループをアプリ ロールに割り当てることもできます。
開発者がアプリ自体に承認のパラメーターを記述して制御する必要がある場合は、アプリ ロールをお勧めします。 たとえば、承認にグループを使用するアプリは、グループ ID と名前の両方が異なる可能性があるため、次のテナントで中断されます。 アプリ ロールを使用するアプリは安全なままです。 実際、アプリ ロールにグループを割り当てることは、SaaS アプリが複数のテナントにプロビジョニングされることを許可するのと同じ理由で、SaaS アプリでも一般的です。
次のステップ
アプリ ロールの詳細については、次のリソースを参照してください。
- コード サンプル (GitHub)
- リファレンス ドキュメント
- ビデオ:Microsoft ID プラットフォームを使用してアプリケーションで承認を実装する (1:01:15)