📩

Microsoft Graph の変更通知を Microsoft Flow で受け取る

2022/01/01に公開

はじめに

Microsoft Graph は Webhook により変更通知を受け取ることができます。アクセス許可の内容から察するに、個人で使うためではなく、組織の管理のためのようなのですが、こういうものはだいたい Microsoft Flow で受け取れるような気がするのでやってみました。[1] 今回はユーザーの変更を受け取ります。

https://docs.microsoft.com/ja-jp/graph/api/resources/webhooks?WT.mc_id=M365-MVP-5002941

フローの作成

変更通知を受け取るフロー

変更通知を受け取るためのサブスクリプションを作成するときに、URL を検証するために、Microsoft Graph から送られる validationToken を返す必要があります。

Microsoft Graph sends a POST request to the notification URL:
POST https://{notificationUrl}?validationToken={TokenDefinedByMicrosoftGraph}
The client must provide a response with the following characteristics within 10 seconds:
A 200 (OK) status code.
The content type must be text/plain.
The body must include the validation token provided by Microsoft Graph.

ということでクエリ文字列に validationToken を含む場合と含まない場合で処理を分岐します。validationToken を含む場合は上記の通りのレスポンスを返却します。含まない場合は実際の変更通知なので、ID を受け取ってユーザー情報を取得し、その情報をメールで送ります。

サブスクリプションを作成するフロー

サブスクリプションのエンドポイントは /subscriptions なのですが、組織全体で共通ではなくユーザー/アプリケーション単位のようです。後述するサブスクリプションの更新を自動化するためには、アプリケーションのアクセス許可 (Client Credentials Grant) を使用する必要があるため、サブスクリプションの作成も同様に行う必要があります。[2] notificationUrl には 変更通知を受け取る Flow の URL を指定します。

サブスクリプションを更新するフロー

サブスクリプションには有効期限があり (最大 3 日間)、更新しないと自動的に削除されてしまいます。永続的に変更通知を受け取るためには、スケジュールで 1 日 1 回フローを呼び出して有効期限を更新する必要があります。

おわりに

Microsoft Flow でできるので LogicApps でもできますし、機能的に LogicApps で実装したほうがよいと思いました。変更通知を受け取るところは、カスタム処理を入れたいのであれば Functions に変更してください。

脚注
  1. いくつかのリソースは管理者の同意が必要なアクセス許可を必要とします。 ↩︎

  2. こちらの記事 を参照のこと。 ↩︎

Discussion