【ServiceNow】Microsoft Graph APIを使用してM365から配布グループを取得する

Microsoft Graph APIを使用するための認証設定方法とグループ情報を取得する方法をご紹介します。

本記事では、Flow Designerを扱っています。


## 認証設定
### Azure ADの設定
#### 1.アプリの作成
API実行時に使用するアプリをAzure ADに作成します。

1.Azureポータルのホーム画面で「Azure Active Directory」を選択

2.左側のメニューで「アプリの登録」を選択し、右側のペインで「新規登録」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/7204fe32-ae21-5aec-40d9-5d569680046b.png)


3.新規登録画面でアプリの名称を決定（Servicenowなど）し、アカウントの種類とリダイレクトURLを設定する
　アカウントの種類 : 選択に関する詳細リンクを参考に利用範囲を決定する
　リダイレクトURL : servicenowのurlを設定(https://xxxxxx.service-now.com)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/23c82f2a-3552-1b38-6e2d-a3d7623ca22d.png)

#### 2.ID/キーの取得
1.アプリケーションの「概要」ページでクライアントIDとテナントIDが表示されるので控えておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/b9ccf205-2a80-3e60-ac34-c8ee9134e4a9.png)

2.「証明書とシークレット」を選択、「新しいクライアントシークレット」を選択して、シークレットの値をコピーしておく
　（作成した直後にしか「値」は表示されないので確実にコピーしておく。忘れてしまったら再作成）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/05b9f9b3-e675-9d1f-4383-25040a902eb7.png)




#### 3.アクセス権の設定
1.左側のメニューで「APIのアクセス許可」を選択し、「アクセス許可の追加」を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/7dc30512-4b0d-cade-ed28-15976ee08a2f.png)

2.遷移先のアクセス許可の要求画面では「Microsoft Graph」を選択

3.「アプリケーションの許可」を選択した上で、必要なAPIを選択
　配布グループとメンバの取得の場合は「Directory.Read.All」を選択する

4.構成されたアクセス許可の画面に戻ったら、「規定のディレクトリに管理者の同意を与えます」チェックを選択して、管理者の同意を付与する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/59d4e1e5-6906-ac6a-d827-329a9f5c9153.png)


以上でAzureAD側の設定は完了です。
　
### ServiceNowの設定
AzureADに接続するための認証設定を行います。

※1~3まででアクセストークンの取得はできますが、今回はFlowDesignerを使用するため設定内容が多くなっています。

#### 1.Application Registriesの登録
1.メニュー：System OAuth > Application Registry

2.入力内容は以下のとおり
|項目名|値|
|:------------------|:------------------|
|name|任意の名前|
|Client ID|AzureAD.アプリケーション（クライアント）ID|
|Client Secret|AzureAD.クライアントシークレットの値|
|Default Grant Type|Client Credentials|
|Token URL|https://login.microsoftonline.com/[AzureADのテナントID]/oauth2/v2.0/token|
|Redirect URL|https://[インスタンス名].service-now.com/oauth_redirect.do|
|Send Credentials|In Request Body (From URL - Encoded)|


#### 2.OAuth Entity Profile Scopesの編集
1.Application Registries画面の関連リストにあるOAuth Entity Profile Scopesの行をダブルクリックして編集する

2.入力内容は以下のとおり
|項目名|値|
|:------------------|:------------------|
|name |任意の名称|
|OAuth Scope|https://graph.microsoft.com/.default|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/ce648ab0-d9a6-4b5d-fd01-aafa215edb4e.png)


#### 3.OAuth Entity Profilesの編集
1.Application Registries画面の関連リストにあるOAuth Entity Profile選択する

2.OAuth Entity Profile Scopesで作成したスコープを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/e43f8456-22bb-d34a-e5e3-d45583d622be.png)




↓↓↓ここから先はFlow DesignerでAPIを使用するために必要な設定です
#### 4.資格情報の登録
1.メニュー：Connections & Credentials > Credentials

2.「OAuth2.0Credentials」をクリックする

3.「OAuth Entity Profile」でアプリケーションレジストリで生成されたプロファイルを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/923e44f9-2fb5-a060-41c6-a5197fc95cb7.png)

#### 5.接続エイリアスの登録をする
1.メニュー：Connection & Credential Aliases

2.入力内容は以下のとおり
|項目名|値|
|:------------------|:------------------|
|Name |任意の名称|
|Type|Connection and Credential|
|Connection Type|HTTP|
|Default Retry Policy|Default HTTP Retry Policy|

保存後に表示される関連リスト「接続」タブで新規ボタンを押下し「6.HTTP(s)接続の登録」へ進む

#### 6.HTTP(s)接続の登録
1.入力内容は以下のとおり
|項目名|値|
|:------------------|:------------------|
|Name |任意の名称|
|Credential|4で作成した資格情報を選択する|
|Connection alias|4で作成した接続エイリアスを選択する|
|Connection URL|https://graph.microsoft.com/v1.0/|


#### 7.アクセストークンの取得
1.メニュー：Connections & Credentials > Credentials

2.「4.資格情報の登録」で登録したレコードを開く

3.Related Linksの「Get OAuth Token」をクリックしアクセストークンを取得する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/fe66ed8a-0c4c-0b82-b0ed-f1a3160637a0.png)


アクセストークンが取得できたら認証設定の完了です！

## アクションの作成（ServiceNow）
### 配布グループ一覧を取得するアクションの作成
#### 1.APIの準備
Microsoft Graph APIのGET /groupsを使用するAPIを用意します。
APIの詳細は下記をご参照ください。

https://docs.microsoft.com/ja-jp/graph/api/group-list?view=graph-rest-1.0&tabs=http

登録されているグループは4種類あり、特定のプロパティ値で判別できます。
URLにfilterを追加することで取得するグループを絞り込むことができるので下記をご参照ください。

https://docs.microsoft.com/ja-jp/graph/api/resources/groups-overview?view=graph-rest-1.0


#### 2.FlowDesignerでアクションの作成する
1.Flow Designerを立ち上げ新規⇒アクションを選択する

2.inputは不要。「＋」ボタン　＞　「REST」をクリックする
|name|Value|
|:------------------|:------------------|
|接続|接続エイリアスを使用|
|接続エイリアス|「ServiceNowで設定」で作成したものを選択|
|リソースパス※|Base URL以降のパスを入力する|
|HTTPメソッド|GET|
|Headers|name：ConsistencyLevel、Value：eventual|

※リソースパス
　ベースURLとリソースパスをつなげると、API実行用のURLになることを確認する
```javascript:例）配布グループのみを取得するリソースパス
groups?$filter = Mailenabled eq true and securityEnabled eq false and NOT(groupTypes/any(s:s eq 'Unified'))&$count=true
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/dfdd7c5e-a531-c872-dc8c-510d5a1e9c6e.png)

以上でアクションの完成です。
テスト実行をしてみるとExecution Detailsにて実行結果を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600769/3b9bb086-459f-6db1-ac7d-944cec5ed2c3.png)


## 終わりに
M365のグループ情報を同期するナレッジを見つけることができず、
また標準のプロビジョニングでは配布グループを同期できないようでしたのでFlow Designerを使用して自作してみました。

今回ご紹介したAPIの他に、グループに所属するメンバを取得するAPIも用意されているので、
REST Stepやアクション処理をさらに作成しフローにまとめることでグループとその周辺情報を同期する一連の処理を作成することができます。

M365連携をご検討中のかた、ぜひ本実装方法も試してみてください。