Microsoft ID プラットフォームがアプリに Microsoft クラウド内のデータへのアクセスを承認する前に、アプリに必要な特権を付与する必要があります。 同様に、アプリが Microsoft Graph を介してデータにアクセスすることをMicrosoft ID プラットフォームが承認する前に、アプリに必要な特権を付与する必要があります。
Microsoft Graph を使用してデータにアクセスして操作するために必要な権限をアプリに付与する方法の 1 つは、アプリに Microsoft Graph のアクセス許可を割り当てることです。 もう 1 つの方法は、ロールベースのアクセス制御 (RBAC) システム (Microsoft Entra RBAC など) です。 場合によっては、Microsoft Graph API を介したデータへのアクセスには、Microsoft Graph のアクセス許可と RBAC アクセス許可の両方が必要になる場合があります。
Microsoft Graph では、委任されたアクセスとアプリ専用アクセスの 2 つのアクセス シナリオがサポートされています。 委任されたアクセスでは、アプリはサインインしているユーザーの代わりに Microsoft Graph を呼び出します。 アプリのみのアクセスでは、アプリは、サインインしているユーザーなしで、独自の ID で Microsoft Graph を呼び出します。
たとえば、アプリケーションには、ユーザーである Tom に代わって Files.Read.All 委任されたアクセス許可が付与されています。 アプリケーションは、Tom が既にアクセスできるorganization内のすべてのファイルのみを読み取ることができます。 Tom は、次のいずれかの方法でアクセス許可を持っているため、ファイルにアクセスできる場合があります。
Tom は、ファイルを作成または所有しています。
ファイルは Tom と直接共有されたか、チームまたはグループ メンバーシップを介して間接的に共有されました。
Tom には、サポートされている RBAC システムを介してアクセス許可が付与されています。
そのため、委任されたシナリオでは、アプリがユーザーに代わって動作する必要がある特権は、アプリに付与されている Microsoft Graph のアクセス許可 と ユーザー自身のアクセス許可によって決まります。
委任されたアクセスシナリオでは、アプリでユーザーが個人の Microsoft アカウント (Outlook.com、職場または学校アカウントなど) でサインインしたり、両方のアカウントの種類を許可したりできます。 委任されたアクセス許可はすべて職場または学校アカウントに対して有効ですが、すべて個人の Microsoft アカウントに対して有効なわけではありません。
個人の Microsoft アカウントに対して有効な委任されたアクセス許可を特定するには、Microsoft Graph のアクセス許可リファレンスを使用します。
ユーザーがアプリにサインインするとき、または場合によっては管理者に委任されたアクセス許可に同意する機会が与えられます。 ユーザーが同意を付与すると、アプリはユーザーのアクセス許可の境界内にあるリソースと API にアクセスできます。
注意
組み込みロールMicrosoft Entra通じて付与されるアクセス許可では、アプリが Microsoft Graph API のみを呼び出すように制限されることはありません。
GET https://graph.microsoft.com/v1.0/groups/{id}/members
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Groups["{group-id}"].Members.GetAsync();
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
//other-imports
)
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
members, err := graphClient.Groups().ByGroupId("group-id").Members().Get(context.Background(), nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
DirectoryObjectCollectionResponse result = graphClient.groups().byGroupId("{group-id}").members().get();
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
result = await graph_client.groups.by_group_id('group-id').members.get()
一部の Microsoft Graph のアクセス許可では、他のアクセス許可よりも幅広いデータまたは操作へのアクセス権が付与されます。 このようなアクセス許可は注意して使用してください。 たとえば、Directory.AccessAsUser.All アクセス許可は、Microsoft Entra ID全体のほぼすべての API 操作へのアクセスを許可する最高の特権委任されたアクセス許可です。
Directory.ReadWrite.All 権限は、特権ランク付けで 2 番目です。
Directory.Read.All は、Microsoft Entra ID リソースに対する最高の特権読み取り専用アクセス許可です。 これらのアクセス許可は、必要な場合にのみ注意して使用する必要があります。 代わりに、常に特権の低いオプションのアクセス許可を使用します。
Microsoft Entra ID リソースに関する API リファレンス ドキュメントでは、これらの高い特権のアクセス許可の一部が、API へのアクセスをサポートするアクセス許可のテーブルから意図的に除外される場合があります。
さらに、グローバル管理者ロールは、Microsoft Entra IDで最高の特権を持つ組み込みロールです。 API リファレンス ドキュメントでは、このロールは、権限の低いロールを優先して API にアクセスするためにサポートされるロールの一覧から意図的に除外されます。
アプリごとの要求されたアクセス許可の制限
Microsoft Entra IDは、クライアント アプリによって要求および同意できるアクセス許可の数を制限します。 これらの制限は、アプリのマニフェストに表示されるアプリのsignInAudience値によって異なります。
signInAudience
許可されたユーザー
アプリが要求できるアクセス許可の最大数
アプリが要求できる Microsoft Graph アクセス許可の最大数
1 つの要求で同意できるアクセス許可の最大数
AzureADMyOrg
アプリが登録されている組織のユーザー
400
400
約 155 の委任されたアクセス許可と約 300 のアプリケーションのアクセス許可
AzureADMultipleOrgs
任意のMicrosoft Entra organizationのユーザー
400
400
約 155 の委任されたアクセス許可と約 300 のアプリケーションのアクセス許可
PersonalMicrosoftAccount
コンシューマー ユーザー (Outlook.com、Live.com アカウントなど)
30
30
30
AzureADandPersonalMicrosoftAccount
コンシューマー ユーザーと任意のMicrosoft Entra organizationのユーザー
30
30
30
Microsoft Graph を使用してアクセス許可 ID を取得する
Azure CLI、PowerShell、またはインフラストラクチャをコード フレームワークとして使用してアクセス許可を設定するには、名前の代わりに使用するアクセス許可の識別子が必要になる場合があります。
アクセス許可リファレンスには、すべての Microsoft Graph アクセス許可の ID が一覧表示されます。 または、Microsoft Graph の Get servicePrincipal API を使用して、すべての Microsoft Graph アクセス許可に関する情報をプログラムで読み取ることもできます。 次の例は要求を示しています。
GET https://graph.microsoft.com/v1.0/servicePrincipals(appId='00000003-0000-0000-c000-000000000000')?$select=id,appId,displayName,appRoles,oauth2PermissionScopes,resourceSpecificApplicationPermissions