Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Graph API について

Graph API について

C0c0e8e4d7f83912cb1b1a0699df82a5?s=128

MiyakeMito

May 21, 2022
Tweet

More Decks by MiyakeMito

Other Decks in Technology

Transcript

  1. Micrsosft Graph API について 気ままに勉強会 #16

  2. 今日の目標 Graph API を Power Automateで 使いこなそう

  3. アジェンダ 1. Graph API とは 2. Graph API を Power

    Automate で使う
  4. Miyake Mito @MiTo60448639 https://qiita.com/MiyakeMito 株式会社アイシーソフト Technical Manager www.icsoft.jp

  5. Power Automate と Power Virtual Agents で ゲームを作ってます ⚫ オセロ

    ⚫ 神経衰弱 ⚫ どうぶつしょうぎ ⚫ WORDL
  6. 本日の参考サイト ▪ Microsoft Graph APIってなに?(りなたむさん) https://speakerdeck.com/rnakamuramartiny/microsoft-graphtutenani ▪ Microsoft FlowでMicrosoft Graph

    APIを利用する2通りの方法 (@r-wakatsuki さん) https://qiita.com/r-wakatsuki/items/3c84fff0471c658a99c1 ▪ Microsoft Graph を使ってみよう(kenichiro nakamuraさん) https://qiita.com/kenakamu/items/6a1ca508dc093779eefa ▪ Microsoft Graph ドキュメント https://docs.microsoft.com/ja-jp/graph/?view=graph-rest-1.0
  7. 注意 プレミアムコネクタを利用します。有料ライセンスが必要です。 運用環境での使用は許可されていませんが、開発向けプランや開発 者テナントであれば無償でお試しいただけます。 ▪ 開発者向けプラン https://powerapps.microsoft.com/ja-jp/developerplan/ ▪ Microsoft 365

    開発者テナント https://developer.microsoft.com/ja-jp/microsoft-365/dev-program
  8. Graph API とは

  9. Graph APIとは ① ◼ M365、AAD、EMSなどの情報を取得、更新できる RESTful Web API ◼ エンドポイントはhttps://graph.microsoft.com

    Graph API アプリ
  10. Graph APIとは ② Microsoft 365 User, Groups, Organizations Outlook /

    Exchange SharePoint, OneDrive Teams Planner To Do Excel OneNote Delve Microsoft Search アクセス可能なソリューション Windows 10,11 Activities Device Relay Commands 通知 Enterprise Mobility + Security Azure AD Intune Advanced Threat Analytics Advanced Threat Protection Identity Manager Dynamics 365 Business Central などなど
  11. Graph APIを Power Automateで 使う

  12. DEMOします ▪ ゲストを招待する https://docs.microsoft.com/ja-jp/graph/api/invitation-post?view=graph-rest-1.0&tabs=http ▪ ライセンスを割り当てる https://docs.microsoft.com/ja-jp/graph/api/user-assignlicense?view=graph-rest-1.0&tabs=http ▪ パスワードを変更する https://docs.microsoft.com/ja-jp/graph/api/passwordauthenticationmethod-

    resetpassword?view=graph-rest-beta&tabs=http ▪ Intune 業務用デバイスIDを登録する https://docs.microsoft.com/ja-jp/graph/api/intune-enrollment-importeddeviceidentity- importdeviceidentitylist?view=graph-rest-beta Graphを利用すると 例えばこんなことができます
  13. 目的のAPIを探す ▪ まずはAPI を見つける Microsoft Graph API のリファレンス から探す https://docs.microsoft.com/ja-jp/graph/api/overview?view=graph-rest-1.0

  14. Graph Explorer ▪ https://developer.microsoft.com/ja-jp/graph/graph-explorer ▪ GUI を使って実際に Graph を触れるツール ▪

    委任されたアクセス許可で実行される ▪ サンプルアカウントで の実行も可能 ➢ Megan Bowenさん
  15. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 これが 一番手軽 Graph API 実行 パターン1 パターン2 パターン3
  16. アプリの登録

  17. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ここ!
  18. アプリをAzure ポータル(Microsoft ID プラット フォーム)に登録 Azure portal ➢ Azure Active

    Directory ➢ アプリの登録 アプリを Azure に登録① 開発者がユーザーや顧客の各自の Microsoft ID やSNSア カウントを使用してサインインで切る仕組みを提供 SSO,ゲストアクセスなど
  19. アプリを Azure に登録② クライアントシークレット追加 アプリの登録 ➢ 証明書とシークレット シークレットの有効期限は最長24ヶ月 New-AzureADApplicationPasswordCredential コマンドで無制限にできる

    (2022年5月時点) 初回作成時のみ表示 画面を閉じると再表示されないので注意
  20. アプリに アクセス許可を付与

  21. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 いまココ!
  22. API を呼び出すために必要なアクセス許可(権限スコー プ)を設定 Azure portal ➢ APIのアクセス許可 ➢ Microsoft Graph

    アクセス許可の付与
  23. アクセス許可 サインインしているユーザーとして 動作するよ ➢ユーザーに代わってAPIを実行す るよ アプリ自体にアクセス許可を付与し て動作します ➢ユーザーなしでAPIを実行します ➢事前に管理者の同意が必要 エンドユーザーが利用するスマホアプ

    リ等、サインインユーザーとして動作 することが必要なアプリで利用 バックグラウンドサービスやデーモン 等のなど、サインインユーザーが存在 しないアプリで利用
  24. 委任されたアクセス許可 ◼ HTTP with Azure ADコネクタ > HTTP要求を呼び出します ◼ HTTP

    with Azure AD コネクタはある程度の権限を保持している ➢ 実行できる権限スコープの一覧は公開されていない ➢ フローを実行した際に権限エラーが発生する場合、アプリケー ションの許可を利用する、またはトークンを取得する必要がある 私の権限で実行して どうぞ
  25. アプリケーションの許可 ◼ HTTP > HTTP ◼ Azure AD にアプリを登録する必要がある ➢

    フローから Active Directory OAuth で認証する 私が実行します
  26. パンダ姐さん曰く。。。 フローは • プッシュトリガーの場合は実行者 • ポーリングトリガーの場合は作成者(大体は) で動くので気を付けてね

  27. 必要なアクセス許可を調べる https://docs.microsoft.com/ja-jp/graph/ で使いたいAPI情報を調べると書いてある 委任されたアクセス許可 アプリケーションの許可

  28. アクセス許可 ▪ [リソース].[操作].[制約] の組み合わせ ➢ [リソース] User:ユーザーに対して Group:グループに対して Sites:サイトコレクションに対して Mail:メールに対して

    など ➢ [操作] Read:読み取り ReadWrite:編集 など ➢ [制約] ALL > Shared > なし の順に操作できる範囲が狭くなる
  29. アプリケーションの 許可でAPI実行

  30. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!
  31. Graph API 実行 {ディレクトリ (テナント) ID} {クライアントシークレット} HTTPメソッド URI Content-type

    : application/json 要求本文 {アプリケーション(クライアント)ID} Acrive Directory Oauth を選択 https://graph.microsoft.com シークレット を選択
  32. URIについて ① https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/children バージョン リソース パラメータ ▪ バージョン v1.0:一般公開 beta:プレビュー段階

    ▪ Microsoft Graph のリソースに対し、APIの応答をカスタマイズするた めのRESTメソッドパラメータを指定(省略可能) メソッド
  33. URIについて ② https://graph.microsoft.com/v1.0/me/ messages?filter=emailAddress eq 'jon@contoso.com' リソース クエリパラメーター ▪ リソースに対し、Odataクエリパラメータでのカスタマイズも可能

    ▪ 形式は {resource}?{query-parameters}
  34. 委任されたアクセス 許可でAPI実行

  35. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 いまココ!
  36. APIの呼び出し ① HTTP with Azure AD コネクタ > HTTP要求を呼び出します アクション

    https://graph.microsoft.com https://graph.microsoft.com
  37. APIの呼び出し ② HTTP with Azure ADコネクタ > HTTP要求を呼び出 します HTTPメソッド

    URI Content-type: application/json 要求本文
  38. 403… HTTP with Azure AD コネクタは ある程度の権限を保持しているが、 権限エラーが発生する場合は・・・ ➢ アプリケーションの許可でアク

    セス権限を付与できるなら ➢ できない場合は アクセストークンを発行する 私に任せて下さい!
  39. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!
  40. アクセストークンを発行 ① ②応答URI( 承認サーバーがトークンを送信するURI) ➢ 認証 ➢ Web http://localhost/myapp/ ①サポートされているアカウントの種類

    ➢ マルチテナント
  41. アクセストークンを発行 ② https://login.microsoftonline.com/common/oauth2/v2.0/authorize ?client_id={アプリケーション(クライアント)ID} &response_type=code &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F &response_mode=query &scope=offline_access%20user.read%20mail.read &state=12345 付与するアクセス許可

    ”offline_access%20”につなげる %20”(Space)で区切る Code={認可コード}
  42. アクセストークンを発行 ③ POST https://login.microsoftonline.com/common/ oauth2/v2.0/token Content-Type : application/x-www-form-urlencoded client_id={アプリケーション(クライアント)ID} &scope=offline_access%20{アクセス許可}

    &code={認可コード} &redirect_uri=http%3A%2F%2Flocalhost%2Fm yapp%2F &grant_type=authorization_code &client_secret={クライアントシークレット}
  43. アクセストークンを発行 ④ アクセストークン リフレッシュトークン API発行のたびに、認可コード取得する のは大変なので、 を発行されたリフレッシュトークンを OneDriveなどに保存しておこう

  44. アクセストークンを発行 ⑤ POST https://login.microsoftonline.com/common/ oauth2/v2.0/token Content-Type : application/x-www-form-urlencoded client_id={アプリケーション(クライアント)ID} &scope=offline_access%20{アクセス許可}

    &refresh_token={リフレッシュトークン} &redirect_uri=http%3A%2F%2Flocalhost%2F myapp%2F &grant_type=refresh_token &client_secret={クライアントシークレット}
  45. トークンの発行サイクル 承認要求 認可コード リフレッシュ トークン リフレッシュ トークン リフレッシュ トークン リフレッシュ

    トークン アクセス トークン アクセス トークン アクセス トークン アクセス トークン アクセストークン発 行時に、リフレッ シュトークンも併せ て発行されるよ 初 回 の み 問 い 合 わ せ の 度 に
  46. 認可サーバー APIのセキュリティ ▪ OAuth2.0 ① 許可申請 クライアント ② 権限付与確認 ③

    許可 ④ 認可コード発行 利用権でアクセス ⑤ アクセストークン リクエスト ⑥ アクセストークン 取得 そうだよ リソースサーバの API使いたい ID Pass 知ってるクライアント? 許可されたよ 許可権を利用権 にかえて 利用権だよ ⑦ APIへ アクセス ⑧ リソース取得 やったぜ! リソースオーナー リソースサーバー Graph API
  47. アクセストークン発行 ROPC POST https://login.microsoftonline.com/ {ディレクトリ (テナント) ID}/oauth2/token Content-Type : application/x-www-form-urlencoded

    grant_type=password &resource=https://graph.microsoft.com &client_id={アプリケーション(クライアント)ID} &username={実行ユーザーID} &password={実行ユーザーパスワード} &client_secret={クライアントシークレット} ROPC権限は1アクションでアクセストークンを取得できるけど、 フローにユーザーID/パスワードとクライアントシークレットを設定するので注意!!
  48. Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の

    み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!
  49. Graph API 実行 HTTPメソッド URI Authorization : Bearer {アクセストークン} 要求本文

    Content-type : application/json body(HTTP')?['access_token']
  50. さいごに

  51. Power AutomateでGraph API 同等機能のコネクタ 機能を共有 1. 提供コネクタを利用 2. カスタムコネクタを利用 3.

    HTTPアクション または HTTP要求を呼び出します ある Power Automateで Graph API を呼びたい 共有する ない 共有しない Power Automate 標準機能でできなきいことをGraph APIで実現しよう!
  52. ご参考に ▪ Power Automate で Graph API の「委任されたアクセス許可」でアクセス トークンを発行する方法 https://qiita.com/MiyakeMito/items/a768841d76d22544a4c6

    ▪ Power Virtual Agents と Power Automate でユーザーのパスワードリセット するチャットボット作成【情シスボットシリーズ①】 https://qiita.com/MiyakeMito/items/e433059661dbfcd4fdf4 ▪ Power Virtual Agents と Power Automate でユーザーにライセンスを付与す るチャットボット作成【情シスボットシリーズ②】 https://qiita.com/MiyakeMito/items/6595dffc3a97a2f92d7c https://qiita.com/MiyakeMito
  53. まとめ Graph API で 便利で、役立つ、そして面白い フローを作ってOutputしてください

  54. ありがとうございました