Microsoft Graph APIでユーザの取得・作成・更新・削除をする

# 事前準備

1. Azureアカウントの作成を行う
    - https://azure.microsoft.com/ja-jp/free/active-directory/
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b2c8c391-b27d-641e-3042-fcdf6b95eca8.png)
2. Azure Active Directoryを開く
   - Microsoft Azure：https://portal.azure.com/
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b9fa1e34-dc02-16c3-8445-dbb41d393771.png)
3. `概要` を開き、 `プライマリ ドメイン` をメモする
![99.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/7a09f087-d18c-72d0-0509-810ecc0fe1f7.png)
4. `アプリ登録 > 新規登録` を押下する
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/4c59b14c-097b-0be7-bd5d-4f9224463fab.png)
5. 必須項目を入力して `登録` を押下する
   - 名前：`任意`
   - サポートされているアカウントの種類：`この組織ディレクトリのみに含まれるアカウント`
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b568cd32-1d77-4761-26fd-04f6e1715db3.png)
6. `アプリケーション (クライアント)` と `ディレクトリ (テナント) ID` をメモする
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/4693bee4-e7de-577b-88df-b7dd96e363d0.png)
7. `証明書とシークレット` を開き、`新しいクライアント シークレット` を押下する
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/6c88156f-c03f-a266-0221-0a0565d06a28.png)
8. 必須項目を入力して `追加` を押下する
   - 説明：`任意`
   - 有効期限：`任意`
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/83403f0e-ebc0-1880-4c5a-db50522d3ac3.png)
9. `値（クライアントシークレット）` をメモする
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/f099ef69-6cb8-43f8-aa36-3d27e5eb0d8a.png)
10. `APIのアクセス許可` を開き、`アクセス許可の追加` を押下する
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/7ea2611c-7a4d-c9a1-2cc3-575bc14ff299.png)
11.  `Microsoft Graph` を押下する
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/f0ba4986-ff38-62b1-390a-9769ae6d5013.png)
12.  `アプリケーションの許可` を選択し、`User.ReadWrite.All` にチェックを付けて、 `アクセス許可の追加` を押下する
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/a0e53be7-ce40-27de-3ab4-6deeb6a54ee4.png)
13. `規定のディレクトリに管理者の同意を与えます` を押下する
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5f50b9d6-8d28-9485-eaad-0a477cf64814.png)
14.  `はい` を押下する
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/29751043-6d6d-cd3a-60fb-16e3286a323c.png)
15. 状態が `既定のディレクトリ に付与...` になっていれば成功
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/217a8432-048d-1cdb-2068-46f5c9f7eec1.png)

# Microsoft Graph APIにリクエスト送信

## アクセストークン取得

1. Google Chromeの拡張機能 Talend API Tester を開く
   - 持っていない人は [Talend API Tester](https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?hl=ja) を追加してください。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/58747daf-df48-c082-ad77-6d083087676f.png)
2. `Import > Import API Tester repository` を押下する
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/8eec8864-cd93-216a-5bd8-d32aba6abe0a.png)
3. Microsoft_Graph_API.json を選択し、 `File` にチェックを付けて `Import` を押下する
   - [Microsoft_Graph_API.json](https://github.com/ryomeblog/qiita/tree/master/Microsoft%20Graph%20API%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E5%8F%96%E5%BE%97%E3%83%BB%E4%BD%9C%E6%88%90%E3%83%BB%E6%9B%B4%E6%96%B0%E3%83%BB%E5%89%8A%E9%99%A4%E3%82%92%E3%81%99%E3%82%8B) は [GitHub](#github) に公開しています
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b68990a3-3d95-f85d-8db8-f79409f053c8.png)
4. `アクセストークン取得` を開き、[事前準備](#事前準備) でメモした `【ディレクトリ (テナント) ID】`、`【アプリケーション (クライアント)】`、`【値（クライアントシークレット）】` を置き換える
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/2da02a48-fef7-b1f9-4663-5097dc2e9741.png)
5. `Send` を押下して、200応答が返ってくれば成功
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/be12c1ba-d93e-f763-973d-7c279661f9d7.png)
```json:レスポンス例
{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "hogehoge..."
}
```
6.`access_token` をメモする

## ユーザ作成

1. `ユーザ作成` を開き、 `【access_token】` と `【プライマリ ドメイン】` をメモした内容に置き換える
   - ※ `Bearer` と `【access_token】` の間には半角スペースがあること
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/e8bed7b1-383b-0a35-cc25-bd413c8bdf5d.png)
2. `Send` を押下して、201応答が返ってくれば成功
```json:レスポンス例
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
    "id": "123hogehoge",
    "businessPhones": [],
    "displayName": "表示名",
    "givenName": "名",
    "jobTitle": "役職",
    "mail": null,
    "mobilePhone": null,
    "officeLocation": "勤務先",
    "preferredLanguage": null,
    "surname": "姓",
    "userPrincipalName": "test-user@【プライマリ ドメイン】"
}
```
3.`id` または `userPrincipalName` をメモする
4.`Azure Active Directory > ユーザ` にユーザが追加されていれば成功
   - https://portal.azure.com/#home
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/2979372d-4c2d-f735-ab3a-1c35221c3fb1.png)

## ユーザ更新

1. `ユーザ更新` を開き、 `【access_token】` と `【id | userPrincipalName】` をメモした内容に置き換える
   - `【id | userPrincipalName】` は `id` または `userPrincipalName` どちらでも可
2. `Send` を押下して、204応答が返ってくれば成功
   - レスポンスはNo Content
3. `Azure Active Directory > ユーザ` のユーザが更新されていれば成功
   - https://portal.azure.com/#home
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/706c4bab-3045-b8a9-90a5-5a51bd648b03.png)

## ユーザ取得

1. `ユーザ取得` を開き、 `【access_token】` と `【id | userPrincipalName】` をメモした内容に置き換える
2. `Send` を押下して、200応答が返ってくれば成功
```json:レスポンス例
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
    "businessPhones": [],
    "displayName": "更新",
    "givenName": "名",
    "jobTitle": "役職",
    "mail": null,
    "mobilePhone": null,
    "officeLocation": "勤務先",
    "preferredLanguage": null,
    "surname": "姓",
    "userPrincipalName": "test-user@【プライマリ ドメイン】",
    "id": "123hogehoge"
}
```

※ `【id | userPrincipalName】` なしだとユーザ全取得になる


## ユーザ削除

1. `ユーザ取得` を開き、 `【access_token】` と `【id | userPrincipalName】` をメモした内容に置き換える
2. `Send` を押下して、204応答が返ってくれば成功
   - レスポンスはNo Content
3. `Azure Active Directory > ユーザ` のユーザが削除されていれば成功
   - https://portal.azure.com/#home

# GitHub

GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/Microsoft%20Graph%20API%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E5%8F%96%E5%BE%97%E3%83%BB%E4%BD%9C%E6%88%90%E3%83%BB%E6%9B%B4%E6%96%B0%E3%83%BB%E5%89%8A%E9%99%A4%E3%82%92%E3%81%99%E3%82%8B

# 参考文献

https://learn.microsoft.com/ja-jp/graph/api/resources/user?view=graph-rest-1.0

https://qiita.com/massie_g/items/fe7540161aa4a5f86bf5

https://qiita.com/kura_yu/items/cd2ebc1763a8923f3d7a

https://qiita.com/kura_yu/items/772d68498eb47de09cf8