Microsoft Graph のアクセス許可と同意を理解する

完了

Microsoft 365 のデータを取得する顧客アプリケーションを開発するには、Microsoft Graph での権限と同意の仕組みについて理解する必要があります。 アプリケーションがアクセスできるデータとアクセスできないデータに関しては、適切な選択を行う必要があります。 たとえば、サインインした販売担当者の次の会議を表示する場合には、アプリケーションが Microsoft 365 から予定表データにアクセスする権限を持っている必要があります。

アプリケーションは、Microsoft Graph を介して Microsoft 365 リソースにアクセスするためのアクセス許可を要求します。 これらの要求は、(アプリケーションが登録されている場合) 前もって作成したり、動的に (アプリケーションの実行時に) 作成することができます。 アプリケーションがアクセス許可を要求する場合、Microsoft Graph が要求を承認する前に、ユーザーまたは管理者がアクセス許可に同意をする必要があります。

アプリケーションが Microsoft Graph と対話をする必要があるときに理解する主な概念は、 3 つあります。

  • Microsoft Graph の権限または範囲
  • アクセス許可の種類
  • アクセス トークン

Microsoft Graph の権限または範囲

Microsoft Graph のアクセス許可には、ユーザー、メール、ファイルなどの特定のリソースに対するアプリのアクセス権を制御する範囲が含まれています。 範囲は、それらのリソースに対して実行可能な操作も制御します。 以下のパターン例では、リソースに対する Microsoft Graph の操作に関する権限を定義しています。

Resource-name.operation.constraint

たとえば、User.Read.All は、ディレクトリ内のすべてのユーザーのプロファイルを読み取るアクセス許可をアプリケーションに付与します。 サインインしているユーザーのプロファイルを読み取る場合、必要なアクセス許可は User.Read です。

アクセス許可の種類

Azure Active Directory には、次の 2 種類のアクセス許可があります。

  • アプリケーションがユーザーの代わりに Microsoft Graph 通話を行う場合、アプリケーションは代理アクセス許可を使用します。 ユーザーは、User.Read のようなアクセス許可範囲の一部に同意することができます。 ただし、アクセス許可範囲の中には高度な特権を持ち、管理者の同意を必要とするものもあります。 高度なアクセス許可範囲の例として、Channel.Delete.All が挙げられます。これは、サインインしているユーザーの代わりに、任意のチームのチャネルを削除します。

    代理アクセス許可範囲の最も簡単な例は、User.Readです。これは、/me エンドポイントを呼び出す必要があります。 Microsoft Graph では、/me を持つすべての API の呼び出しは、現在サインインしているユーザーのコンテキストを使用します。

  • アプリケーションのアクセス許可には、アプリケーションにサインインしているユーザーは必要ありません。 バックグラウンド処理やアクセス許可の昇格など、ユーザーが存在しない場合によく使用されます。 管理者が事前にアクセス許可に同意します。

    アプリケーションのアクセス許可範囲の例として、Calendars.ReadWriteがあります。これにより、サインインしているユーザーなしで、アプリがすべての予定表のイベントを作成、読み取り、更新、削除できます。 その情報を取得可能なサインインしているユーザーがいないため、アプリケーションのアクセス許可範囲に /me API を使用することはできません。

アクセス トークン

アプリケーションからアクセス許可が要求され、ユーザーまたは管理者が同意した後は、アプリケーションは Microsoft ID プラットフォームからアクセス トークンを取得することができます。 アクセス トークンは映画のチケットのようなもので、映画を見るためにお金を払っていることを証明するために係員に渡すものとして考えることができます。 アプリケーションは、Microsoft 365 のデータにアクセスする権限を持っていることを証明するために、アクセス トークンを Microsoft Graph に渡します。

Microsoft Graph は、すべての要求の HTTP ヘッダー内に有効なアクセス トークンを要求します。 各 HTTP 要求の承認ヘッダーには、単語の前にスペースがある "Bearer" という単語が渡されます。 これは、所有者 (ベアラー) が映画のチケットのようにアクセス トークンを使用できることを思い出させてくれます。 つまり、チケットを持っている人なら身分を証明しなくても入場できるのです。 この理由から、Microsoft Graph では、すべての要求に対して HTTPS 暗号化が必要となります。 また、映画のチケットと同様に、アクセス トークンは短時間 (通常は 1 時間) のみ有効です。

次に、Microsoft Graph 要求に対する承認ヘッダーの表示例を示します。

GET https://graph.microsoft.com/v1.0/me/ HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==