Microsoft Graph のアクセス許可スコープ

Microsoft Graph は、アプリがリソースに対して持つアクセス権を制御するために使用される、OAuth 2.0 のアクセス許可スコープを公開しています。開発者は、アプリが必要とするアクセス権に合ったアクセス許可スコープを指定する必要があります。(Azure AD 認証を使用している場合は、通常 Azure 管理ポータルを通してこれを行います。Azure AD v2.0 エンドポイントを使用している場合は、実行時間中に動的にアクセス許可を要求します。)

サインイン後、ユーザーまたは管理者には、構成されているアクセス許可スコープでアプリがリソースにアクセスできるようにすることに同意する機会が与えられます。このため、アプリが必要とする最低レベルの特権を提供するアクセス許可スコープを選ぶ必要があります。アプリのアクセス許可を構成する方法と同意プロセスの詳細については、「アプリケーションを Azure Active Directory と統合する」をご覧ください。

注:グループやタスクなどに関係するいくつかの Microsoft Graph アクセス許可は、個人用のアカウントには適用されません。

アプリ専用アクセス許可と委任されたアクセス許可の対比

アクセス許可スコープは、アプリ専用スコープまたは委任されたスコープのいずれかに指定できます。アプリ専用スコープ (アプリケーション ロールとも呼ばれます) では、スコープによって提供されるすべての特権がアプリに付与されます。通常、アプリ専用スコープは、サインイン中のユーザーが不在でもサービスとして実行されるアプリによって使用されます。

委任されたアクセス許可スコープは、ユーザーに代わって動作するアプリを対象にしています。これらのスコープでは、サインインしているユーザーの特権が委任され、アプリはユーザーとして動作できるようになります。アプリに実際に付与される特権は、スコープによって付与された特権とサインインしているユーザーが所有する特権を組み合わせた最低限の特権 (共通部分) になります。たとえば、アクセス許可のスコープによって、すべてのディレクトリ オブジェクトの書き込みのための委任された特権が付与されているものの、サインしているユーザーが自分自身のユーザー プロファイルを更新するための特権しか持っていない場合、アプリはサインインしているユーザーのプロファイルの書き込みのみができ、他のオブジェクトの書き込みはできません。

: グループでは、コア グループの管理とマネージメントに関する API のサブセットのみが、アプリ専用のアクセス許可と委任されたアクセス許可の両方をサポートします。グループ API の他のすべてのメンバーは、委任されたアクセス許可のみサポートします。例については、「既知の問題」を参照してください。

ユーザーおよびグループの完全なプロファイルと基本プロファイル

ユーザーまたはグループの完全なプロファイル (またはプロファイル) には、エンティティの宣言済みプロパティがすべて含まれています。プロファイルには機密性の高いディレクトリ情報、または個人情報 (PII) が含まれている可能性があるため、いくつかのスコープは、アプリのアクセスを基本プロファイルと呼ばれる限られたプロパティだけに制限しています。ユーザーの場合、基本プロファイルには次のプロパティのみが含まれます。

  • 表示名
  • 名、姓
  • 写真
  • メール アドレス

グループの場合、基本プロファイルには表示名のみが含まれます。

アクセス許可スコープの詳細

Microsoft Graph リソースにアクセスするための必要なアクセス許可を持つようにアプリを構成する必要があります。アクセス許可は、個々のリソースへの読み取り、書き込み、またはその両方を行う権利に関してスコープ指定されます。

次の表では、Microsoft Graph のアクセス許可スコープを一覧表示し、各スコープによって付与されるアクセス権を説明します。

  • スコープ列にはスコープ名が一覧表示されます。スコープ名の形式は、resource.operation.constraint です。たとえば、Group.ReadWrite.All となります。constraint が "All" の場合、スコープはアプリに対し、ディレクトリのすべての指定されたリソース (Group) の操作 (ReadWrite) を実行できる権限を付与します。それ以外の場合は、スコープはサインインしているユーザーのプロファイルの操作のみを許可します。スコープによっては、指定された操作に対して制限された特権を与える可能性があります。詳しくは、説明の列をご覧ください。
  • アクセス許可の列には、Azure ポータルにスコープがどのように表示されるかを示します。
  • 説明の列では、スコープが与える権限の完全なセットについて説明します。委任されたスコープの場合、アプリに実際に付与されるアクセス権は、スコープによって付与されたアクセス権とサインインしているユーザー特権の最低限の特権の結合 (���差部分) になります。
  • スコープはアクセス許可が管理者の同意を必要とするかどうかに基づいてグループ化されます。

:v1.0 および beta のアクセス許可スコープの制限事項については、「既知の問題」をご覧ください。

管理者の同意が必要なアクセス許可

スコープ アクセス許可 説明
Directory.AccessAsUser.All ディレクトリに対するサインインしたユーザーと同じアクセス アプリで、サインインしているユーザーと同じようにディレクトリ内の情報にアクセスできるようにします。
Directory.Read.All ディレクトリ データの読み取り アプリで、ユーザー、グループ、アプリなどの組織のディレクトリ内のデータを読み取ることができるようにします。
Directory.ReadWrite.All ディレクトリ データの読み取りと書き込み アプリで、ユーザーやグループなどの組織のディレクトリ内のデータを読み書きできるようにします。ユーザーまたはグループの削除はできません。アプリでユーザーまたはグループの削除や、ユーザー パスワードのリセットはできません。
Group.Read.All すべてのグループの読み取り アプリで、サインインしているユーザーの代わりに、グループを一覧表示し、グループのプロパティとすべてのグループ メンバーシップを読み取ることができるようにします。アプリで、サインインしているユーザーがアクセスできるすべてのグループの予定表、会話、ファイル、およびその他のグループのコンテンツを読み取ることができるようにします。
Group.ReadWrite.All すべてのグループの読み取りと書き込み アプリで、サインインしているユーザーの代わりに、グループを作成したり、すべてのグループのプロパティとメンバーシップを読み取ったりできるようにします。さらに、グループの所有者が自身のグループを管理できるよう、またグループ メンバーがグループのコンテンツを更新できるようにします。
User.Read.All すべてのユーザーの完全なプロファイルの読み取り User.ReadBasic.All とほぼ同じですが、異なる点は、アプリがマネージャーや直属の部下などナビゲーション プロパティを読み取る場合に、組織のすべてのユーザーの完全なプロファイルを読み取ることが可能になることです。完全なプロファイルには、ユーザー エンティティの宣言されたプロパティがすべて含まれます。ユーザーがメンバーになっているグループを読み取るためには、アプリにさらに Group.Read.All または Group.ReadWrite.All のいずれかが必要となります。
User.ReadWrite.All すべてのユーザーの完全なプロファイルの読み取りと書き込み アプリで、サインインしているユーザーの代わりに、組織内の他のユーザーのプロファイル プロパティ、部下、上司の完全なセットを読み書きできるようにします。

管理者の同意を必要としないアクセス許可

スコープ アクセス許可 説明
Calendars.Read ユーザーのカレンダーの読み取り アプリで、ユーザーのカレンダー内のイベントを読み取ることができるようにします。
Calendars.Read.Shared ユーザーのカレンダーと共有のカレンダーの読み取り アプリで、委任されたカレンダーと共有のカレンダーを含む、ユーザーがアクセスできるすべてのカレンダー内のイベントを読み取ることができるようにします。
Calendars.ReadWrite ユーザーのカレンダーへのフル アクセス アプリで、ユーザーのカレンダー内のイベントの作成、読み取り、更新、削除を行えるようにします。
Calendars.ReadWrite.Shared ユーザーのカレンダーと共有のカレンダーの読み取りと書き込み アプリで、ユーザーがアクセス許可を得ているすべてのカレンダー内のイベントを作成、読み取り、更新、および削除できるようにします。これには、委任されたカレンダーと共有のカレンダーが含まれます。
Contacts.Read ユーザーの連絡先の読み取り アプリで、ユーザーの連絡先を読み取ることができるようにします。
Contacts.Read.Shared ユーザーの連絡先と共有の連絡先の読み取り アプリで、ユーザー自身の連絡先と共有の連絡先を含む、ユーザーがアクセス許可を得ている連絡先を読み取ることができるようにします。
Contacts.ReadWrite ユーザーの連絡先へのフル アクセス アプリで、ユーザーの連絡先の作成、読み取り、更新、削除を行えるようにします。
Contacts.ReadWrite.Shared ユーザーの連絡先と共有の連絡先の読み取りと書き込み アプリで、ユーザー自身の連絡先と共有の連絡先を含むユーザーがアクセス許可を得ている連絡先の作成、読み取り、更新、削除を行えるようにします。
Files.Read ユーザーのファイルと共有ファイルの読み取り アプリで、サインインしているユーザーのファイルと、そのユーザーと共有されているファイルを読み取ることができるようにします。
Files.Read.All ユーザーがアクセスできるすべてのファイルの読み取り アプリで、サインしているユーザーがアクセスできるすべてのファイルを読み取ることができるようにします。
Files.Read.Selected ユーザーが選んだファイルの読み取り アプリでユーザーが選ぶファイルを読み取ることができるようにします。ユーザーがファイルを選んだ後、アプリで数時間アクセスできます。
Files.ReadWrite ユーザーのファイルと共有ファイルのフル アクセス アプリで、サインインしているユーザーのファイルと、そのユーザーと共有されているファイルの読み取り、作成、更新、削除を行えるようにします。
Files.ReadWrite.All ユーザーがアクセスできるすべてのファイルへのフル アクセス アプリで、サインしているユーザーがアクセスできるすべてのファイルの読み取り、作成、更新、削除を行えるようにします。
Files.ReadWrite.AppFolder アプリケーション フォルダーへのフル アクセス アプリで、アプリケーション フォルダー内のファイルを読み取り、作成、更新および削除できるようにします。
Files.ReadWrite.Selected ユーザーが選んだファイルの読み取りと書き込み アプリでユーザーが選ぶファイルを読み書きできるようにします。ユーザーがファイルを選んだ後、アプリで数時間アクセスできます。
Mail.Read ユーザー メールの読み取り アプリで、ユーザー メールボックス内のメールを読み取ることができるようにします。
Mail.Read.Shared ユーザーのメールと共有のメールの読み取り アプリで、ユーザー自身のメールと共有のメールを含む、ユーザーがアクセス許可を得ているメールを読み取れるようにします。
Mail.ReadWrite ユーザーのメールの読み取りおよび書き込みアクセス許可 アプリで、ユーザー メールボックス内のメールの作成、読み取り、更新、削除を行えるようにします。メールを送信するためのアクセス許可は含まれません。
Mail.ReadWrite.Shared ユーザーのメールと共有のメールの読み取りと書き込み アプリで、ユーザー自身のメールと共有のメールを含むユーザーがアクセス許可を得ているメールの作成、読み取り、更新、削除を行えるようにします。メールを送信するためのアクセス許可は含まれません。
Mail.Send ユーザーからのメールとして送信 アプリで、組織内のユーザーとしてメールを送信できるようにします。
Mail.Send.Shared 他のユーザーに代わってメールを送信 アプリで、他のユーザーの代理としての送信を含め、サインインしているユーザーとしてメールを送信できるようにします。
MailboxSettings.ReadWrite ユーザーのメールボックス設定の読み取りと書き込み アプリで、ユーザーのメールボックス設定の作成、読み取り、更新、削除を行えるようにします。メールを送信するためのアクセス許可は含まれません。
offline_access ユーザーのデータへの常時アクセス (プレビュー) 現在アプリを使用していない場合も、アプリでユーザー データの読み取りと更新ができるようにします。
openid ユーザーのサインイン (プレビュー) ユーザーが職場または学校アカウントでアプリにサインインできるようにします。またアプリで、ユーザーの基本的なプロファイル情報を読み取れるようにします。
User.Read サインインとユーザー プロファイルの読み取り ユーザーがアプリにサインインできるようにします。またサインインしているユーザーのプロファイルをアプリで読み取ることができるようにします。完全なプロファイルには、ユーザー エンティティの宣言されたプロパティがすべて含まれます。アプリは、上司や直属の部下などのナビゲーション プロパティを読み取ることができません。さらに、サインインしているユーザーの次の基本的な会社情報も (TenantDetail オブジェクトを通じて) 読み取ることができるようにします: