Microsoft Entra ID でアプリの要求されたアクセス許可を更新する
Microsoft Entra ID でアプリケーションを設定するとき、開発者はアクセス許可を使って他のアプリやサービスのデータへのアクセスを要求できます。 アクセス許可の要求は、アプリのマニフェストに静的アクセス許可を追加するか、実行時にアクセス許可を動的に要求することで、行うことがことできます。 その後、ユーザーまたは管理者は、同意の際にアクセス許可を付与して、アプリが必要とするデータにアクセスできるようにします。
アプリケーションの機能が進化すると、アクセスする必要があるリソースも変わります。 これらの変更には、新機能の有効化、不要なアクセスの排除、高い特権のアクセス許可の低い特権のものへの置き換えが含まれる場合があります。 この記事では、Microsoft Entra 管理センターと Microsoft Graph API の呼び出しを使って、アプリケーションが要求するアクセス許可を更新する方法について説明します。
アプリのアクセス許可の更新は、セキュリティのベスト プラクティスであるだけでなく、アプリのユーザー エクスペリエンスと導入を強化する方法でもあります。 次のセクションでは、アプリのアクセス許可を更新するいくつかの利点について説明します。
- アプリに新しい機能ができた場合は、さらに多くのアクセス許可を要求して、アプリが必要とする追加のリソースにアクセスできるようにします。
- 顧客は、アプリケーションが機能するために必要な最小限の特権のアクセス許可のみを要求する場合、それを導入する可能性が高くなります。 これは、アプリが顧客のプライバシーとデータ保護を尊重し、必要以上のリソースにアクセスしないことを示しています。
- さらに、アプリが侵害された場合、特権アクセス許可が少ない、または低いほど、影響を受ける範囲が狭くなります。 つまり、攻撃者がアクセスできる顧客のデータやリソースが少なくなり、可能性のある損害が軽減されます。
- アプリのアクセス許可を更新することで、アプリのセキュリティ、使いやすさ、コンプライアンスを向上させ、顧客との信頼を築くことができます。
前提条件
アプリの要求されたアクセス許可を更新するには、次のものが必要です。
- Microsoft Entra ユーザー アカウント。 まだお持ちでない場合は、無料のアカウントを作成してください。
- 次のいずれかのロール: アプリケーション管理者、クラウド アプリケーション管理者。 管理者ではないアプリケーション所有者は、アプリの要求されたアクセス許可を更新できます。
アクセス許可の更新のシナリオ
次のセクションでは、アプリケーションが要求するアクセス許可を更新する必要がある 3 つの主なシナリオを示します。
- アクセス許可をアプリケーションに追加する
- 使われていないアクセス許可をアプリケーションから削除する
- アクセス許可を置き換える
Note
アプリケーションの要求されたアクセス許可を更新しても、保護されたリソースへのアクセスをアプリが自動的に許可または取り消しを行うことはありません。 顧客または組織内の管理者が、新しく追加されたアクセス許可への同意を許可するか、手動でアクセス許可自体を取り消す必要があります。
アクセス許可をアプリケーションに追加する
アプリに、以前は必要なかったアクセス許可を必要とする新しい機能がある場合は、アクセス許可を追加できます。
アプリが機能するために必要な最小限のアクセス許可へのアクセスのみを要求するのがベスト プラクティスです。 アプリの新機能をサポートするために新しいアクセス許可を追加する必要がある場合は、その機能のための最小特権のアクセス許可のみを要求するようにします。
たとえば、メール通知機能をアプリケーションに追加するには、ユーザーのメールにアクセスする必要があります。 そのためには、Mail.ReadWrite
アクセス許可でのアクセスを要求する必要があります。
静的同意にアクセス許可を追加する
静的同意は、実行時ではなく、アプリケーションの登録時にユーザーまたは管理者にアクセス許可を要求する方法です。 静的同意を行うには、Microsoft Entra 管理センターの [アプリの登録] ペインで、アプリに必要なすべてのアクセス許可を宣言する必要があります。 Microsoft Entra 管理センターを使って更新できるのは、静的同意に関するアクセス許可のみです。 同意のさまざまな種類について詳しくは、同意の種類に関する記事をご覧ください。 動的同意のアクセス許可を更新する方法については、この記事の Microsoft Graph のタブをご覧ください。
このセクションでは、静的同意にアクセス許可を追加する方法について説明します。
Microsoft Entra 管理センターでは、2 つの方法で静的同意にアクセス許可を追加できます。
オプション 1: [API のアクセス許可] ペインでアクセス許可を追加する
- 少なくともクラウド アプリケーション管理者またはアプリケーション所有者として、Microsoft Entra 管理センターにサインインします。
- [ID]>[アプリケーション]>[アプリの登録]>[すべてのアプリケーション] を参照してください。
- アクセス許可を追加するアプリの登録を見つけて選びます。 アクセス許可は 2 つの方法で追加できます。
- [API のアクセス許可] ペインでアクセス許可を追加します。
オプション 2: アプリケーション マニフェストにアクセス許可を追加する
- 左側のナビゲーション ウィンドウの [管理] メニュー グループで、[マニフェスト] を選びます。 選択するとエディターが開き、アプリ登録オブジェクトの属性を直接編集できます。
- アプリケーションのマニフェスト ファイルで
requiredResourceAccess
プロパティを慎重に編集します。 resourceAppId
プロパティとresourceAccess
プロパティを追加し、必要なアクセス許可を割り当てます。- 変更を保存します。
アクセス許可を追加する以下の手順を完了するには、次のリソースと特権が必要です。
- アプリ内や Graph エクスプローラーなど、任意のツールで HTTP 要求を実行します。
- 少なくともクラウド アプリケーション管理者であるユーザーまたはターゲット アプリ登録の所有者として、API を実行します。
- これらの変更を行うために使うアプリには、
Application.ReadWrite.All
アクセス許可が付与されている必要があります。
アプリで必要なアクセス許可、そのアクセス許可 ID、およびそれがアプリの役割 (アプリケーションのアクセス許可) か委任されたアクセス許可かを明らかにします。 たとえば、Microsoft Graph のアクセス許可を要求する場合は、Microsoft Graph のアクセス許可に関する記事で、アクセス許可とその ID の一覧を参照してください。
必要な Microsoft Graph のアクセス許可をアプリに追加します。 次の例では、アプリケーションの更新 API を呼び出して、オブジェクト ID
aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
で識別されるアプリの登録に、必要な Microsoft Graph のアクセス許可を追加します。 この例では、委任されたアクセス許可Analytics.Read
とアプリケーションのアクセス許可Application.Read.All
を使います。 Microsoft Graph は、グローバルに一意のAppId
の値00000003-0000-0000-c000-000000000000
によって、ServicePrincipal オブジェクトとして識別されます。PATCH https://graph.microsoft.com/v1.0/applications/aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb Content-Type: application/json { "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "e03cf23f-8056-446a-8994-7d93dfc8b50e", "type": "Scope" }, { "id": "9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30", "type": "Role" } ] } ] }
動的同意にアクセス許可を追加する
動的同意は、[アプリの登録] ペインで静的に宣言するのではなく、実行時にユーザーまたは管理者にアクセス許可を要求する方法です。 動的同意を使うと、アプリは特定の機能に必要なアクセス許可のみを要求し、必要なときにユーザーまたは管理者から同意を得ることができます。 動的同意は、委任されたアクセス許可と共に使用でき、/.default
スコープと組み合わせて、すべてのアクセス許可に対する管理者の同意を要求できます。
動的同意にアクセス許可を追加するには:
Microsoft Graph を使う: アプリの登録に必要な Microsoft Graph のアクセス許可を追加します。 この例では、委任されたアクセス許可
Analytics.Read
とアプリケーションのアクセス許可Application.Read.All
を使います。 "scopes" の値を、アプリに構成する Microsoft Graph の委任されたアクセス許可の値に置き換えます。要求は次の例のようになります。
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=00001111-aaaa-2222-bbbb-3333cccc4444&response_type=code&scope=Analytics.Read+Application.Read
MSAL.js を使う: "scopes" の値を、アプリに構成する Microsoft Graph の委任されたアクセス許可の値に置き換えます。
const Request = { scopes: ["openid", "profile"], loginHint: "example@domain.net" }; myMSALObj.ssoSilent(Request) .then((response) => { // your logic }).catch(error => { console.error("Silent Error: " + error); if (error instanceof msal.InteractionRequiredAuthError) { myMSALObj.loginRedirect(loginRequest); } });
エンタープライズ アプリケーションの追加されるアクセス許可に対する同意を許可する
アクセス許可がアプリケーションに追加された後、ユーザーまたは管理者は新しいアクセス許可に対する同意を許可する必要があります。 管理者ではないユーザーがアプリにサインインすると、同意を求めるメッセージが表示されます。 一方、管理者ユーザーは、アプリに初めてサインインするとき、または Microsoft Entra 管理センターで、組織内のすべてのユーザーに代わって、新しいアクセス許可に対する同意を許可できます。
追加されたアクセス許可で管理者の同意が必要な場合、必要なアクションはアプリの種類によって異なります。
- ホーム テナント内のシングル テナント アプリとマルチテナント アプリ: ユーザーは、少なくとも特権ロール管理者ロールとしてサインインし、テナント全体の同意を許可する必要があります。
- 顧客のテナントのマルチテナント アプリ: ユーザーが次にサインインを試みたときに、新しい同意プロンプトが表示されます。 アクセス許可で必要なのがユーザーの同意のみの場合、ユーザーは同意を許可できます。 アクセス許可で管理者の同意が必要な場合、ユーザーは管理者に連絡して同意の許可を求める必要があります。
使われていないアクセス許可の要求を停止する
アクセス許可を削除すると、機密データの漏えいやセキュリティの侵害が発生するリスクが減り、ユーザーまたは管理者の同意プロセスが簡単になります。 アプリでアクセス許可が不要になった場合は、アプリの登録の必要なリソース アクセスとコードからアクセス許可を削除することで、アプリがアクセス許可を要求しないようにする必要があります。 たとえば、メール通知を送信しなくなったアプリケーションでは、Mail.ReadWrite
アクセス許可を削除できます。
重要
アプリの登録からアクセス許可を削除しても、アプリに既に付与されているアクセス許可は自動的に取り消されません。 手動でアクセス許可を取り消す必要があります。 詳しくは、この記事の「エンタープライズ アプリケーションの削除されたアクセス許可の同意を取り消す」セクションをご覧ください。
静的同意に対するアクセス許可の要求を停止する
静的な同意を必要とするアクセス許可の要求を停止するには、[アプリの登録] ペインからアクセス許可を削除する必要があります。 テナントの管理者は、[エンタープライズ アプリケーション] ペインでアクセス許可を取り消す必要もあります。 エンタープライズ アプリケーションに付与されたアクセス許可を取り消す方法について詳しくは、エンタープライズ アプリケーションのアクセス許可の取り消しに関する記事をご覧ください。
このセクションでは、静的同意のアクセス許可の要求を停止する方法について説明します。
Microsoft Entra 管理センターでは、2 つの方法で静的同意からアクセス許可を取り消すことができます。
オプション 1: [API のアクセス許可] ペインから
- 少なくともクラウド アプリケーション管理者またはアプリケーション所有者として、Microsoft Entra 管理センターにサインインします。
- [ID]>[アプリケーション]>[アプリの登録]>[すべてのアプリケーション] を参照してください。
- アクセス許可を削除するアプリの登録を見つけて選びます。
- [API のアクセス許可] ペインからアクセス許可を削除します。
オプション 2: アプリケーション マニフェストから
- 左側のナビゲーション ウィンドウの [管理] メニュー グループで、[マニフェスト] を選びます。 エディターが開き、アプリ登録オブジェクトの属性を直接編集できます。
- アプリケーションのマニフェスト ファイルで
requiredResourceAccess
プロパティを慎重に編集します。 - 不要なアクセス許可を
resourceAppId
プロパティとresourceAccess
プロパティから削除します。 - 変更を保存します。
アクセス許可を削除する以下の手順を完了するには、次のリソースと特権が必要です。
- アプリ内や Graph エクスプローラーなど、任意のツールで HTTP 要求を実行します。
- 少なくともクラウド アプリケーション管理者またはターゲット アプリ登録の所有者として、API を呼び出します。
- これらの変更を行うために使うアプリには、
Application.ReadWrite.All
アクセス許可が付与されている必要があります。
アプリのアクセス許可を特定します。
たとえば、アプリが Microsoft Graph のアクセス許可を要求しないようにするには、アプリの Microsoft Graph のアクセス許可、そのアクセス許可 ID、およびそれがアプリの役割 (アプリケーションのアクセス許可) か委任されたアクセス許可かを明らかにします。
不要な Microsoft Graph のアクセス許可をアプリから削除します。 次の例では、アプリケーションの更新 API を呼び出して、サンプル クライアント ID
00001111-aaaa-2222-bbbb-3333cccc4444
で識別されるアプリの登録から、不要な Microsoft Graph のアクセス許可を削除します。 この例では、アプリケーションにはAnalytics.Read
、User.Read
、Application.Read.All
があります。 委任されたアクセス許可Analytics.Read
とアプリケーションのアクセス許可Application.Read.All
を削除する必要があります。 Microsoft Graph は、グローバルに一意のAppId
の値00000003-0000-0000-c000-000000000000
によって ServicePrincipal オブジェクトとして識別され、Microsoft Graph はそのDisplayName
とAppDisplayName
によって識別されます。PATCH https://graph.microsoft.com/v1.0/applications/00001111-aaaa-2222-bbbb-3333cccc4444 Content-Type: application/json { "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6 ", "type": "Scope" } ] } ] }
動的同意でのアクセス許可の要求を停止する
動的同意要求から委任されたアクセス許可を削除する必要がある場合は、削除するアクセス許可を除外してスコープ パラメーターを指定します。 アクセス許可を削除すると、アプリは対応する API を呼び出さなくなります。
このメソッドは、委任されたアクセス許可に対してのみ機能します。 アプリケーションのアクセス許可は、静的な同意を通じて管理者によって要求および付与され、OAuth 2.0 認可要求中にスコープ パラメーターに含まれません。
動的同意でのアクセス許可の要求を停止するには:
- Microsoft Graph の使用: "scopes" パラメーターから不要な Microsoft Graph の委任されたアクセス許可を削除します。 この例のアプリケーションは、3 つの委任されたアクセス許可
Analytics.Read
、User.Read
、Application.Read
を要求しています。 委任されたアクセス許可Analytics.Read
とApplication.Read
は、このアプリでは不要になりました。User.Read
だけが必要です。
要求は次の例のようになる必要があります。
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=00001111-aaaa-2222-bbbb-3333cccc4444&response_type=code&scope=User.Read
MSAL.js の使用: "scopes" で不要な Microsoft Graph の委任されたアクセス許可を削除します。
const Request = { scopes: ["openid", "profile"], loginHint: "example@domain.net" }; myMSALObj.ssoSilent(Request) .then((response) => { // your logic }).catch(error => { console.error("Silent Error: " + error); if (error instanceof msal.InteractionRequiredAuthError) { myMSALObj.loginRedirect(loginRequest); } });
エンタープライズ アプリケーションの削除されたアクセス許可の同意を取り消す
アプリの登録からアクセス許可を削除した後、テナントの管理者は、組織のデータを保護するために同意を取り消す必要もあります。 削除されたアクセス許可で管理者の同意が必要な場合、必要なアクションはアプリの種類によって異なります。
- シングル テナント アプリとホーム テナントのマルチテナント アプリ: シングル テナント アプリの場合は、テナントの管理者に連絡し、アプリに既に付与されているアクセス許可を取り消してもらいます。 マルチテナント アプリの場合は、アプリケーションのインスタンスが存在するすべてのテナントの管理者に連絡して、エンタープライズ アプリケーションに付与されているアクセス許可を取り消してもらいます。 削除されたアクセス許可への同意を取り消すと、削除されたアクセス許可を通じてアプリケーションがアクセスを維持することがなくなります。
- 顧客のテナント内のマルチテナント アプリ: お知らせ、ブログ、その他の通信チャネルを通じたアクセス許可を取り消すよう、顧客に伝えます。
シングル テナントアプリとマルチテナント アプリの両方で、ユーザーの同意が有効になっているテナントの管理者以外のユーザーは、MyApps ポータルを使って、以前に付与したアクセス許可への同意を取り消すことができます。 エンド ユーザーが MyApps ポータルでアクセス許可を取り消す方法について詳しくは、エンド ユーザーの同意の取り消しに関する記事をご覧ください。
アクセス許可を置き換える
低い特権のアクセス許可で十分な場合は、高い特権を持つアクセス許可を置き換える必要があります。
また、アクセス許可を置き換えると、機密データが公開されたり、セキュリティが侵害されたりするリスクが減り、ユーザー エクスペリエンスと信頼が向上します。 アプリで Directory.ReadWrite.All
などの高い特権のアクセス許可を使っている場合は、User.ReadWrite.All
などの低い特権のアクセス許可でアプリの機能に十分かどうかを検討する必要があります。
Note
静的同意に対するアプリの要求されたアクセス許可を変更する場合は、顧客が同意し直す必要があります。 同意し直すことで、以前に許可したすべてのアクセス許可が取り消され、新しいものへの同意が許可されます。 動的同意に対するアプリの要求されたアクセス許可を変更しても、以前に許可したアクセス許可は取り消されません。 顧客は、アクセス許可を手動で取り消す必要があります。
アクセス許可を置き換えるには、不要なアクセス許可を削除し、代わりのものを追加する必要があります。 この手順は、この記事の「使われていないアクセス許可の要求を停止する」およびアクセス許可の追加に関するセクションで説明されている手順に似ています。