【GraphAPI】アプリケーション許可権限 (1)：事前準備

# はじめに

Graph API をアプリケーション許可権限で実行すると、管理者がテナント全体に渡る情報を取得したり、変更することができます。

この記事では、アプリケーション許可権限で Graph API を実行するために必要な事前準備についてまとめました。

# 1. 事前準備

[アプリケーション許可権限](https://qiita.com/atsmin77/items/31df2f5624840b45dda0#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%B1%E5%8F%AF%E6%A8%A9%E9%99%90) で Graph API を実行するには、以下の事前準備が必要です。

1. Entra ID へのアプリケーションの登録
1. Graph API を実行するプログラムの準備

## 1.1 Entra ID へのアプリケーションの登録

::: note
Entra ID へのアプリケーションの登録は、管理者ロールが割り当てられていない一般ユーザーでも行うことができます。
:::

::: note warn
Graph API を実行する際には Entra ID アプリケーションにアクセス許可を追加する必要があります。アクセス許可の追加は管理者で行う必要があります。
:::

1. Entra ID 管理センターから **[アプリケーション] - [アプリの登録] - [+新規登録]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/f534c362-4d63-4503-9b88-a6472f06b4e0.png)
1. **[名前]** と **[リダイレクト URL]** を入力して **[保存]** をクリックします
::: note
[リダイレクト URL] は [ユーザー委任権限](https://qiita.com/atsmin77/items/b4ab7c00ce1bb8544f90#%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E5%A7%94%E4%BB%BB%E6%A8%A9%E9%99%90%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95) で Graph API を実行するために必要な設定です。アプリケーション許可権限のみ利用する場合は省略できます。
:::
※ 以下の [リダイレクト URI] は [Insomnia](#12-graph-api-を実行するプログラムの準備) から Graph API 実行する場合の設定例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/3dfee779-847b-4325-aa24-e8fe956af4c3.png)
   | 項目 | 内容 |
   |:-:|:-:|
   | 名前 | 任意の名前  |
   | リダイレクト URI  | Web / https://insomnia.rest | 
1. 作成したアプリケーションの **[証明書とシークレット] - [+新しいクライアント シークレット]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/3cd0be5b-60c0-49d4-8411-a320ccb3b899.png)
1. **[追加]** ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/329364ba-d735-49df-82c7-902419a3704b.png)
1. 追加されたシークレットの **[値]** 列をコピーボタンからコピーし、控えておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/1b8c81b8-f071-45aa-93ae-0c8abf9cca27.png)
1. **[概要]** タブから **[アプリケーション(クライアント) ID]** と **[ディレクトリ(テナント) ID]** をコピーし、控えておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/a592f8a5-092e-4cdb-890a-f585eb506b3b.png)

::: note
次の手順で以下の情報を使用します。
* アプリケーション(クライアント) ID
* ディレクトリ(テナント) ID
* クライアント シークレット
:::

::: note warn
追加したクライアントシークレットは、ブラウザのページを更新すると、以降 Entra ID 管理センターから確認することができなくなります。
値が分からなくなった場合には、古いクライアントシークレットを削除して、再度作成します。
:::

## 1.2 Graph API を実行するプログラムの準備

Graph API を実行するプログラムは、公開されているアプリケーションや PowerShell、自身で作成したプログラムなど何でも構いません。

公開されているアプリケーションを利用する場合には [Postman](https://www.postman.com/) がよく使われます。公開情報にある Microsoft Graph Postman コレクションを利用すると Graph API を簡単に実行することができます。
(参考：Microsoft Graph API で Postman を使用する)
https://learn.microsoft.com/ja-jp/graph/use-postman

しかし、Postman では作成したコレクションなどの設定が常にクラウド側へアップロードされます。組織によっては、Postman の利用が制限されている場合もあると思います。そのため、この記事では [Insomnia](https://insomnia.rest/) を利用して Graph API を実行してみます。

::: note
Insomnia は Postman とよく似ていますが、クラウドへ同期せずにローカルの環境だけで利用することもできます。Microsoft Graph Postman コレクションも利用できます。
:::

#### 代表的なアプリケーションの比較

| 名前 | クラウド同期 | ローカル環境のみで利用可 | アカウント作成 |
|:-:|:-:|:-:|:-:|
| Postman | 〇 | × | 必要 |
| Insomnia  | 〇 | 〇 | 必要 |
| Bruno | × | 〇 | 不要 |

※ [Bruno](https://www.usebruno.com/) というツールもあり、こちらはクラウド同期の機能が無いためアカウントを作成せずに利用できます。クラウドへ同期する必要が無ければこちらも便利です。

### 1.2.1 Insomnia のインストール
1. [ダウンロードページ](https://insomnia.rest/download) からインストーラをダウンロードしてインストールします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/15c19042-f569-46c5-a056-6ad265c69b44.png)
1. インストールが完了すると Insomnia が開きます
   **[Continue]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/2ab81689-f036-4b6a-b1e7-a745e2d6b0a1.png)
1. 任意の方法でサインアップします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/d427d443-d5e9-45e9-92d4-f0dfaf4152aa.png)
1. 初期画面が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/4624d5c8-46bb-4a73-843c-d0504229e8bf.png)

### 1.2.2 Microsoft Graph Postman コレクションのインポート

1. 以下の 2 つのファイルを右クリックして [名前を付けて保存] します
[Microsoft Graph.postman_collection.json](https://atsmingraph.blob.core.windows.net/graph/Microsoft%20Graph.postman_collection.json)
[M365 Environment.postman_environment.json](https://atsmingraph.blob.core.windows.net/graph/M365%20Environment.postman_environment.json)
※ Microsoft Graph Postman コレクションの JSON ファイルです。
1. **[Import]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/45d987fb-bcae-4530-b42c-8eb7731da020.png)
1. **Microsoft Graph.postman_collection.json** を選択し **[Scan]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/60b6a704-0aee-4ae8-a346-29f5706f0fc5.png)
1. **[Import]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5b80fbfd-b9ed-467f-9fbe-3a832526aec4.png)
1. **Microsoft Graph** が追加されたことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/3c21e505-ee7a-44ed-8719-c4f5a5c5ab01.png)
1. **[Environments]** をクリックし、**[Import]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/48c20b48-0c2d-4087-beb7-0bb7560ad15f.png)
1. **M365 Environment.postman_environment.json** を選択し **[Scan]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/b37aece9-6a91-4e59-bc29-4cee49aa8b76.png)
1. **[Import]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/56795280-7fe2-41ce-a9e5-035d39cc4cd1.png)
1. **M365 Environment** が追加されたことを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/25e6e13d-5cd5-4a80-815d-b06664c659d0.png)

### 1.2.3 Entra ID アプリケーションの情報を設定

1. **[M365 Environment]** をクリックします 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/40faaf23-2bcb-415f-83d5-f254d19fa16d.png)
1. **[ClientID]** / **[TenantID]** / **[ClientSecret]** の値を Entra ID に登録したアプリケーションから取得した値に置き換えます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/0d9dc2d6-3750-46dd-a502-b3b6701c92e7.png)
1. ホームボタンから **[Collections] - [Microsoft Graph]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/9da4b57e-f07b-49f9-a8e3-033fa33999b9.png)
1. **[Base Environment]** をクリックし、プルダウンから **[M365 Environment]** を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/ec43f3b5-957d-408b-a86e-23d2bd339a20.png)
1. **[M365 Environment]** と表示されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/b768fcbd-4d4d-490b-9069-98677c381b74.png)

### 1.2.4 アクセストークンの取得
1. **[Microsoft Graph]** フォルダをクリックして、右側の **[Scripts] - [Pre-request]** タブに入力されている内容を削除します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/16aab0d6-c3c3-49ef-b301-aea6b3c776ef.png)
1. フォルダのアイコンから **[Application]** フォルダをクリックし、**[Auth]** タブをスクロールして **[Fetch Tokens]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/3e729028-63f6-4fee-9425-dda3ba50f264.png)
1. 取得されたアクセストークンが **[ACCESS TOKEN]** に表示されることを確認します
※ ey... のような文字列がアクセストークンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/b4709a2d-92ce-4c3f-b59b-8ee3eadd0c0f.png)

#### アクセストークンについて

::: note
アクセストークンは、クライアントシークレット等の認証情報により、プログラムが組織の Entra ID に登録されたアプリケーションであることを認証すると発行されます。プログラムはアクセストークンによって Graph API へアクセスできるようになります。
:::

::: note warn
アクセストークンには有効期限があり、既定では 1 時間です。有効期限が切れた場合には、**[Refresh Token]** ボタンからアクセストークンを再度取得します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/b8f4c6d5-5648-4839-b15a-a98d018ca0c1.png)


(参考：手順 3: アクセス トークンを要求する)
https://learn.microsoft.com/ja-jp/graph/auth-v2-service?tabs=http#step-3-request-an-access-token

# 次の記事

ここまでの手順でアクセストークンが取得できれば、Graph API が実行できるようになります。以下の記事に続きます。

https://qiita.com/atsmin77/private/b4ab7c00ce1bb8544f90