Slide 1

Slide 1 text

Microsoft Graph API について 気ままに勉強会 #16

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

アジェンダ 1. Graph API とは 2. Graph API を Power Automate で使う

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Power Automate と Power Virtual Agents で ゲームを作ってます ⚫ オセロ ⚫ 神経衰弱 ⚫ どうぶつしょうぎ ⚫ WORDL

Slide 6

Slide 6 text

本日の参考サイト ■ 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

Slide 7

Slide 7 text

注意 プレミアムコネクタを利用します。有料ライセンスが必要です。 運用環境での使用は許可されていませんが、開発向けプランや開発 者テナントであれば無償でお試しいただけます。 ■ 開発者向けプラン https://powerapps.microsoft.com/ja-jp/developerplan/ ■ Microsoft 365 開発者テナント https://developer.microsoft.com/ja-jp/microsoft-365/dev-program

Slide 8

Slide 8 text

Graph API とは

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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 などなど

Slide 11

Slide 11 text

Graph APIを Power Automateで 使う

Slide 12

Slide 12 text

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を利用すると 例えばこんなことができます

Slide 13

Slide 13 text

目的のAPIを探す ■ まずはAPI を見つける Microsoft Graph API のリファレンス から探す https://docs.microsoft.com/ja-jp/graph/api/overview?view=graph-rest-1.0

Slide 14

Slide 14 text

Graph Explorer ■ https://developer.microsoft.com/ja-jp/graph/graph-explorer ■ GUI を使って実際に Graph を触れるツール ■ 委任されたアクセス許可で実行される ■ サンプルアカウントで の実行も可能 ➢ Megan Bowenさん

Slide 15

Slide 15 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 これが 一番手軽 Graph API 実行 パターン1 パターン2 パターン3

Slide 16

Slide 16 text

アプリの登録

Slide 17

Slide 17 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ここ!

Slide 18

Slide 18 text

アプリをAzure ポータル(Microsoft ID プラット フォーム)に登録 Azure portal ➢ Azure Active Directory ➢ アプリの登録 アプリを Azure に登録① 開発者がユーザーや顧客の各自の Microsoft ID やSNSア カウントを使用してサインインで切る仕組みを提供 SSO,ゲストアクセスなど

Slide 19

Slide 19 text

アプリを Azure に登録② クライアントシークレット追加 アプリの登録 ➢ 証明書とシークレット シークレットの有効期限は最長24ヶ月 New-AzureADApplicationPasswordCredential コマンドで無制限にできる (2022年5月時点) 初回作成時のみ表示 画面を閉じると再表示されないので注意

Slide 20

Slide 20 text

アプリに アクセス許可を付与

Slide 21

Slide 21 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 いまココ!

Slide 22

Slide 22 text

API を呼び出すために必要なアクセス許可(権限スコー プ)を設定 Azure portal ➢ APIのアクセス許可 ➢ Microsoft Graph アクセス許可の付与

Slide 23

Slide 23 text

アクセス許可 サインインしているユーザーとして 動作するよ ➢ユーザーに代わってAPIを実行す るよ アプリ自体にアクセス許可を付与し て動作します ➢ユーザーなしでAPIを実行します ➢事前に管理者の同意が必要 エンドユーザーが利用するスマホアプ リ等、サインインユーザーとして動作 することが必要なアプリで利用 バックグラウンドサービスやデーモン 等のなど、サインインユーザーが存在 しないアプリで利用

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

アプリケーションの許可 ◼ HTTP > HTTP ◼ Azure AD にアプリを登録する必要がある ➢ フローから Active Directory OAuth で認証する 私が実行します

Slide 26

Slide 26 text

パンダ姐さん曰く。。。 フローは • プッシュトリガーの場合は実行者 • ポーリングトリガーの場合は作成者(大体は) で動くので気を付けてね

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

アクセス許可 ■ [リソース].[操作].[制約] の組み合わせ ➢ [リソース] User:ユーザーに対して Group:グループに対して Sites:サイトコレクションに対して Mail:メールに対して など ➢ [操作] Read:読み取り ReadWrite:編集 など ➢ [制約] ALL > Shared > なし の順に操作できる範囲が狭くなる

Slide 29

Slide 29 text

アプリケーションの 許可でAPI実行

Slide 30

Slide 30 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!

Slide 31

Slide 31 text

Graph API 実行 {ディレクトリ (テナント) ID} {クライアントシークレット} HTTPメソッド URI Content-type : application/json 要求本文 {アプリケーション(クライアント)ID} Acrive Directory Oauth を選択 https://graph.microsoft.com シークレット を選択

Slide 32

Slide 32 text

URIについて ① https://graph.microsoft.com/v1.0/drives/{drive-id}/items/{item-id}/children バージョン リソース パラメータ ■ バージョン v1.0:一般公開 beta:プレビュー段階 ■ Microsoft Graph のリソースに対し、APIの応答をカスタマイズするた めのRESTメソッドパラメータを指定(省略可能) メソッド

Slide 33

Slide 33 text

URIについて ② https://graph.microsoft.com/v1.0/me/ messages?filter=emailAddress eq '[email protected]' リソース クエリパラメーター ■ リソースに対し、Odataクエリパラメータでのカスタマイズも可能 ■ 形式は {resource}?{query-parameters}

Slide 34

Slide 34 text

委任されたアクセス 許可でAPI実行

Slide 35

Slide 35 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 いまココ!

Slide 36

Slide 36 text

APIの呼び出し ① HTTP with Azure AD コネクタ > HTTP要求を呼び出します アクション https://graph.microsoft.com https://graph.microsoft.com

Slide 37

Slide 37 text

APIの呼び出し ② HTTP with Azure ADコネクタ > HTTP要求を呼び出 します HTTPメソッド URI Content-type: application/json 要求本文

Slide 38

Slide 38 text

403… HTTP with Azure AD コネクタは ある程度の権限を保持しているが、 権限エラーが発生する場合は・・・ ➢ アプリケーションの許可でアク セス権限を付与できるなら ➢ できない場合は アクセストークンを発行する 私に任せて下さい!

Slide 39

Slide 39 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!

Slide 40

Slide 40 text

アクセストークンを発行 ① ②応答URI( 承認サーバーがトークンを送信するURI) ➢ 認証 ➢ Web http://localhost/myapp/ ①サポートされているアカウントの種類 ➢ マルチテナント

Slide 41

Slide 41 text

アクセストークンを発行 ② 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={認可コード}

Slide 42

Slide 42 text

アクセストークンを発行 ③ 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={クライアントシークレット}

Slide 43

Slide 43 text

アクセストークンを発行 ④ アクセストークン リフレッシュトークン API発行のたびに、認可コード取得する のは大変なので、 を発行されたリフレッシュトークンを OneDriveなどに保存しておこう

Slide 44

Slide 44 text

アクセストークンを発行 ⑤ 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={クライアントシークレット}

Slide 45

Slide 45 text

トークンの発行サイクル 承認要求 認可コード リフレッシュ トークン リフレッシュ トークン リフレッシュ トークン リフレッシュ トークン アクセス トークン アクセス トークン アクセス トークン アクセス トークン アクセストークン発 行時に、リフレッ シュトークンも併せ て発行されるよ 初 回 の み 問 い 合 わ せ の 度 に

Slide 46

Slide 46 text

認可サーバー APIのセキュリティ ■ OAuth2.0 ① 許可申請 クライアント ② 権限付与確認 ③ 許可 ④ 認可コード発行 利用権でアクセス ⑤ アクセストークン リクエスト ⑥ アクセストークン 取得 そうだよ リソースサーバの API使いたい ID Pass 知ってるクライアント? 許可されたよ 許可権を利用権 にかえて 利用権だよ ⑦ APIへ アクセス ⑧ リソース取得 やったぜ! リソースオーナー リソースサーバー Graph API

Slide 47

Slide 47 text

アクセストークン発行 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/パスワードとクライアントシークレットを設定するので注意!!

Slide 48

Slide 48 text

Powe Automateで利用する手順 アプリの登録 アプリにアクセス許可を付与 アプリケーションの 許可でAPI実行 委任されたアクセス許可でAPI実行 初 回 の み 問 い 合 わ せ の 度 に Graph API 実行 Graph API 実行 アクセストークン 発行 Graph API 実行 パターン1 パターン2 パターン3 ココ!

Slide 49

Slide 49 text

Graph API 実行 HTTPメソッド URI Authorization : Bearer {アクセストークン} 要求本文 Content-type : application/json body(HTTP')?['access_token']

Slide 50

Slide 50 text

さいごに

Slide 51

Slide 51 text

Power AutomateでGraph API 同等機能のコネクタ 機能を共有 1. 提供コネクタを利用 2. カスタムコネクタを利用 3. HTTPアクション または HTTP要求を呼び出します ある Power Automateで Graph API を呼びたい 共有する ない 共有しない Power Automate 標準機能でできなきいことをGraph APIで実現しよう!

Slide 52

Slide 52 text

ご参考に ■ 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

Slide 53

Slide 53 text

まとめ Graph API で 便利で、役立つ、そして面白い フローを作ってOutputしてください

Slide 54

Slide 54 text

ありがとうございました