アクセス許可スコープ | Graph API 概念

適用対象: Graph API | Azure Active Directory

Graph API は、顧客ディレクトリ データに対してアプリに与えるアクセス権の制御に使用される OAuth 2.0 アクセス許可スコープを公開します。 開発者は、アプリで必要となるアクセス権に適切なアクセス許可スコープでアプリを構成します。 通常、その作業は Azure ポータルで行います。 サインイン時、開発者が構成したアクセス許可スコープでディレクトリ データにアクセスすることをアプリに許可するための同意を与える機会がユーザーまたは管理者に与えられます。 そのような理由から、アプリで必要となる最小限のアクセス許可を与えるアクセス許可スコープを選択してください。 アプリのアクセス許可の構成方法と同意プロセスの詳細については、「Azure Active Directory とアプリケーションの統合」を参照してください。

重要

Azure Active Directory のリソースにアクセスするには、Azure AD Graph API ではなく Microsoft Graph を使用することを強くお勧めします。現在は Microsoft Graph を中心にして開発が進められており、Azure AD Graph API の今後の機能強化は予定されていません。Azure AD Graph API の使用が適切である場合もありますが、非常にまれです。詳細については、Office Dev Center の Microsoft Graph または Azure AD Graph ブログの記事をご覧ください。バッチ処理は現在、Microsoft Graph でサポートされていません。この機能には、Azure AD Graph API を使用する必要があります。

アクセス許可スコープの概念

###「アプリのみ」スコープと「委任」スコープの違い アクセス許可スコープは、「アプリのみ」または「委任」になります。 「アプリのみ」スコープ (別名、アプリ ロール) の場合、スコープで提供されるすべての特権がアプリに付与されます。 通常、アプリのみスコープは、サインイン ユーザーがいない状態でサービスとして実行されるアプリで利用されます。 「委任」アクセス許可スコープは、ユーザーがサインインするアプリに利用されます。 サインインしたユーザーの特権がアプリに委譲され、アプリはサインイン ユーザーとして動作できます。 アプリに付与される実際の特権は、スコープで付与される特権とサインイン ユーザーが所有する特権を最小特権で組み合わせたもの (共通集合) になります。 たとえば、アクセス許可スコープによりすべてのディレクトリ オブジェクトを書き込む委任特権が与えられるが、サインイン ユーザーには自分のユーザー プロファイルを更新する特権しか与えられていない場合、アプリはサインイン ユーザーのプロファイルを書き込むことはできるが、他のオブジェクトを書き込むことはできません。

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

ユーザーまたはグループの完全プロファイル (またはプロファイル) には、すべてのエンティティの宣言されたプロパティが含まれています。 プロファイルには機密ディレクトリ情報または個人を特定できる情報 (PII) が含まれている可能性があるため、一部のスコープでは、基本プロファイルと呼ばれる限られたプロパティ セットにアプリのアクセスが制限されます。 ユーザーの場合、基本プロファイルには、プロパティとして表示名、名、姓、写真、電子メール アドレスのみが含まれます。 グループの場合、基本プロファイルには表示名だけが含まれます。

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

次の表は Graph API のアクセス許可スコープとそれぞれのスコープにより与えられるアクセス権をまとめたものです。

  • スコープ列には、スコープ名が一覧表示されています。 スコープ名は resource.operation.constraint の形式になります。たとえば、Group.ReadWrite.All です。 制約が "All (すべて)" の場合、ディレクトリで指定されたすべてのリソース (Group) に操作 (ReadWrite) を実行する機能がアプリに与えられます。それ以外の場合、サインイン ユーザーのプロファイルに対する操作のみが許可されます。 スコープから、指定した操作に限られた特権が付与される場合があります。詳細については、説明列を参照してください。
  • アクセス許可列は、Azure ポータルでスコープを表示する方法を示しています。
  • 説明列は、スコープで与えられる権限の完全なセットについての説明です。 委任スコープの場合、アプリに与えられる実際のアクセス権は、スコープで付与されるアクセス権とサインイン ユーザーの特権を最小特権で組み合わせたもの (共通集合) になります。
スコープ アクセス許可 説明 スコープの種類 管理者の承認が必要
User.Read サインインとユーザー プロファイルの読み取りを可能にする ユーザーがアプリにサインインすることとサインインしたユーザーの完全プロファイルをアプリが読み取ることを許可します。 完全プロファイルには、User エンティティのすべての宣言済みプロパティが含まれます。 アプリは、マネージャーや直属の部下などの、ナビゲーション プロパティを読み取ることができません。 また、(TenantDetail オブジェクトを介して) サインイン ユーザーの基本会社情報として、テナント ID、テナント表示名、確認済みドメインを読み取ることをアプリに許可します。 委任 なし
User.ReadBasic.All ユーザーの基本プロファイルをすべて読み取る サインイン ユーザーの代理として、組織のすべてのユーザーの基本プロファイルを読み取ることをアプリに許可します。 表示名、名、姓、写真、電子メール アドレスというプロパティがユーザーの基本プロファイルになります。 ユーザーが属するグループを読み取るには、Group.Read.All または Group.ReadWrite.All もアプリに必要になります。 委任 なし
User.Read.All すべてのユーザーの完全プロファイルを読み取る 組織のすべてのユーザーの完全プロファイルの読み取りをアプリに許可することを除き、また、マネージャーや直属の部下などのナビゲーション プロパティを読み取る場合を除き、User.ReadBasic.All と同じです。 完全プロファイルには、User エンティティのすべての宣言済みプロパティが含まれます。 ユーザーが属するグループを読み取るには、Group.Read.All または Group.ReadWrite.All もアプリに必要になります。 委任 はい
Group.Read.All すべてのグループを読み取る (プレビュー) サインイン ユーザーの代理として、組織のすべてのグループの基本プロファイルを読み取ることをアプリに許可します。 アプリはグループが属するグループの基本プロファイルを読み取ることもできます。 グループの基本プロファイルには、グループの表示名のみが含まれます。 グループのメンバーのプロファイル情報を読み取るには、User.ReadBasic または User.Read.All もアプリに必要になります。 委任 はい
Group.ReadWrite.All すべてのグループの読み書き (プレビュー) 組織のすべてのグループの完全プロファイルを読み取ることと、グループを作成し、更新することをサインイン ユーザーの代理としてアプリに許可します。 アプリはグループが属するグループの完全プロファイルを読み取ることもできます。 完全プロファイルには、Group エンティティのすべての宣言されたプロパティが含まれます。 グループのメンバーのプロファイル情報を読み取るには、User.ReadBasic または User.Read.All もアプリに必要になります。 委任 はい
Device.ReadWrite.All すべてのデバイスの読み書き サインイン ユーザーなしで、すべてのデバイス プロパティの読み書きをアプリに許可します。 デバイス作成、デバイス削除、デバイスの代替セキュリティ ID の更新は許可されません。 アプリのみ はい
Directory.Read.All ディレクトリ データの読み取り ユーザー、グループ、アプリ、その関連ナビゲーション プロパティなど、組織のディレクトリのすべてのデータの読み取りをアプリに許可します。 : アプリケーションが組織のテナントに登録されている場合、このアクセス許可を要求するアプリケーションを承諾できます。 アプリのみ、委任 はい
Directory.ReadWrite.All ディレクトリ データの読み書き 組織のディレクトリのすべてのデータの読み取りをアプリに許可します。 ユーザーとグループを作成し、更新することと、ナビゲーション プロパティを更新することをアプリに許可するが、ユーザーやグループを削除することは禁止されます。 アプリケーションでスキーマ拡張を定義することもアプリに許可されます。 特権の詳しい一覧については、下の「Directory.ReadWrite.All privileges detail」を参照してください。 アプリのみ、委任 はい
Directory.AccessAsUser.All サインイン ユーザーとしてディレクトリにアクセスする サインイン ユーザーが組織のディレクトリのデータにアクセスする場合と同じアクセスがアプリに許可されます。 : ネイティブ クライアント アプリには、このアクセス許可のユーザー承諾を与えることができます。ただし、Web アプリの場合、管理者の承諾が必要になります。 委任 はい

: 既定では、Azure ポータルを使用してアプリを作成するとき、Azure AD は User.Read の委任アクセス許可スコープをアプリに割り当てます。

Directory.ReadWrite.All 権限詳細

Directory.ReadWrite.All アクセス許可スコープは次の特権を付与します。

  • すべてのディレクトリ オブジェクトの完全読み取り (宣言されたプロパティとナビゲーション プロパティの両方)
  • ユーザーの作成と更新
  • ユーザーの有効化と無効化 (会社の管理者を除く)
  • ユーザーの代替セキュリティ ID の設定 (管理者を除く)
  • グループの作成と更新
  • グループ メンバーシップの管理
  • グループ所有者の更新
  • ライセンス割り当ての管理
  • アプリケーションでスキーマ拡張を定義する
  • : ユーザー パスワードをリセットする権限はありません
  • : エンティティを削除する権限はありません (ユーザーまたはグループを含む)
  • : 上の一覧にないエンティティの作成または更新は明示的に除外します。 これには Application、Oauth2PermissionGrant、AppRoleAssignment、Device、ServicePrincipal、TenantDetail、ドメインなどが含まれます。

アクセス許可スコープのシナリオ

次の表は、特定の操作を実行するためにアプリに必要となるアクセス許可スコープをまとめたものです。 アプリが一部の操作を実行できるかどうかは、アクセス許可スコープ (「アプリのみ」または「委任」) に依存する場合があります。さらに、委任の場合は、サインイン ユーザーの特権により左右されます。

通信の種類 必要なアクセス 必要なアクセス許可スコープ
サインインし、ユーザーの名前とサムネイル写真を含むタイルを表示する。 サインイン ユーザーの完全なプロファイルを読み取る。
基本会社情報を読み取る。
User.Read
基本的なユーザー選択ウィンドウ。 サインイン ユーザーの代理として、すべてのユーザーの基本プロファイルを読み取る。 User.ReadBasic.All
完全プロファイルを含むユーザー選択ウィンドウ。 上記に加え、サインイン ユーザーの代理として、ユーザーの完全プロファイルにアクセスする。 User.Read.All
組織図ナビゲーター。 サインイン ユーザーの代理として、すべてのユーザー、そのマネージャー、直属の部下の完全プロファイルを読み取る。 User.Read.All
アプリのアクセスを制御するグループを含むユーザー選択ウィンドウ。

グループとメンバーシップのビューアー。
サインイン ユーザーの代理として、すべてのグループとユーザーの基本プロファイルを読み取る。
ユーザーのマネージャーと直属の部下の基本ユーザー プロファイルを読み取る。
ユーザーのグループ メンバーシップの基本プロファイルを読み取る。
グループのグループ メンバーシップの基本プロファイルを読み取る。
グループのメンバーの基本プロファイルを読み取る。
User.ReadBasic.All と Group.Read.All
サインイン ユーザーとユーザーのマネージャー、直属の部下、グループ メンバーシップのプロファイルを表示する。 me 操作を使用して次の項目を読み取ります。
サインイン ユーザーの完全プロファイル。
サインイン ユーザーのマネージャーと直属の部下の完全プロファイル。
サインイン ユーザーが属するグループの基本プロファイル。

: 2 つのスコープが組み合わされると、個々に明記されている me 操作のアクセス権以上のアクセス権が付与されます。
User.Read.All と Group.Read.All
グループの作成と管理をユーザーに許可するグループ管理サービス。 サインイン ユーザーの代理として、すべてのグループとユーザーの完全プロファイルを読み取る。
ユーザーのマネージャーと直属の部下の完全プロファイルを読み取る。
ユーザーのグループ メンバーシップの完全プロファイルを読み取る。
グループのグループ メンバーシップの完全プロファイルを読み取る。
グループのメンバーの完全プロファイルを読み取る。
グループとそのナビゲーション プロパティ (メンバー) の作成と更新。
User.Read.All と Group.ReadWrite.All
すべてのディレクトリ オブジェクト (ナビゲーション プロパティを含む) を読み取る。 Directory.Read.All
すべてのディレクトリ オブジェクト (ナビゲーション プロパティを含む) を読み取る。
ユーザーとグループのオブジェクトを作成し、更新する。
ユーザーやグループの削除は含まれません。

: ここに掲載されている権限がすべてではありません。
Directory.ReadWrite.All
サインイン ユーザーとして動作する。 サインイン ユーザーの代理として、ディレクトリ オブジェクト (ナビゲーション プロパティを含む) を読み書きする。 Directory.AccessAsUser.All

管理者、ユーザー、ゲスト ユーザーの既定アクセス

次の表は、ディレクトリの (グローバル) 管理者、ユーザー、ゲスト ユーザーの既定アクセスをまとめたものです。 ディレクトリの構成設定や 1 つまたは複数のディレクトリ ロールのユーザーのメンバーシップによっては、既定のアクセス権がさらに付与されたり、制限されたりします。 ユーザーやゲスト ユーザーがディレクトリ データにアクセスするための権利の構成方法については、「Azure AD でユーザーを作成または編集する」を参照してください。 さまざまなディレクトリ ロールに関連付けられているアクセス権の詳細については、「Azure AD の管理者ロールの割り当て」を参照してください。

ユーザーの種類 アクセス
グローバル管理者 すべてのディレクトリ オブジェクトの読み取り。
すべてのディレクトリ オブジェクトの作成、更新、削除。
User すべてのディレクトリ オブジェクトの読み取り。
アプリケーションと関連サービス プリンシパルの作成。
自分のプロファイルの更新。
所有するグループ (とメンバー プロパティ) の更新。
所有するアプリケーションとサービス プリンシパルの更新。
所有するアプリケーションとサービス プリンシパルの削除。
ゲスト ユーザー 自分の完全プロファイルの読み取り。
他のすべてのユーザーの基本プロファイルの読み取り。
すべてのグループの基本プロファイルの読み取り。
アプリケーションの読み取り。
自分のプロファイルの一部のプロパティの更新。
ユーザーまたはグループは検索できません (下の「ゲスト ユーザーによるユーザーとグループの検索の制限」を参照)。

ゲスト ユーザーによるユーザーとグループの検索の制限

ユーザーとグループの検索機能では、ユーザーまたはグループのリソース セットにクエリを実行することで、顧客ディレクトリのユーザーまたはグループをアプリで検索できます (https://graph.windows.net/myorganization/users?api-version=1.6 など)。 管理者とユーザーの両方にこの機能が与えられます。 ゲスト ユーザーには与えられません。 サインイン ユーザーがゲスト ユーザーの場合、アクセス許可スコープによっては、特定のユーザーまたはグループのプロファイルをアプリが読み取れます。ユーザーの場合はオブジェクト ID かユーザー プリンシパル名 (UPN) が、グループの場合はオブジェクト ID が使用されます (https://graph.windows.net/myorganization/users/241f22af-f634-44c0-9a15-c8cd2cea5531?api-version=1.6 など)。ただし、潜在的に複数のエンティティを要求するクエリをユーザーまたはグループ リソースに実行することはできません。 たとえば、アクセス許可スコープによっては、アプリはナビゲーション プリンシパルのリンクをフォローして取得するユーザーまたはグループのプロファイルを読み取れるが、ディレクトリのすべてのユーザーまたはグループを返すクエリは発行できません。

その他のリソース