Microsoft GraphAPIをつかってみよう。-- 実践 編--
・はじめに
前回は、Microsoft Graph APIを利用するためのアプリ登録手順についてお話ししました。
※Microsoft Graph APIをつかってみよう。-- 事前準備 編--
今回は、登録したアプリを使って PowerShell で GraphAPI を利用し、情報取得するまでをご説明します。
・クライアント資格情報による認証
Microsoft Graph にアクセスする際は認証が必要になります。
その認証方法は下記の4パターンです。
・デバイスコードによる認証
・認証コードによる認証
・パスワードによる認証
・クライアント資格情報による認証
今回は「クライアント資格情報による認証」に絞って紹介します。
この認証方法は、サインインを必要とせずMicrosoft Graphに対して認証することができます。
実行時にサインインを求められないため「自動化されたタスクやスクリプト」に最適です。
例として「自分の組織のすべてのグループ」を取得するためのサンプルを用意しました。
PowerShellで下記ソースコードを実行すると「自分の組織のすべてのグループ」を取得できます。
※<>内は登録したアプリの情報に修正してください。
・サンプルコード
#######################GraphAPI接続 start
$clientid = "<アプリケーション(クライアント)ID>"
$tenantName = "<アプリを登録したテナントのドメイン> 例(QiitaTest2020.onmicrosoft.com)"
$clientSecret = "<クライアント シークレット>"
$ReqTokenBody = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $clientID
Client_Secret = $clientSecret
}
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
#######################GraphAPI接続 end
#######################GraphAPIで情報取得
$apiUrl = 'https://graph.microsoft.com/v1.0/Groups/'
$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get
$Groups = ($Data | select-object Value ).Value
$Groups | Format-Table DisplayName, Description -AutoSize
解説
アクセストークン取得
#######################GraphAPI接続 start
$clientid = "<アプリケーション(クライアント)ID>"
$tenantName = "<アプリを登録したテナントのドメイン> 例(QiitaTest2020.onmicrosoft.com)"
$clientSecret = "<クライアント シークレット>"
$ReqTokenBody = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $clientID
Client_Secret = $clientSecret
}
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
#######################GraphAPI接続 end
#######################GraphAPIで情報取得
$apiUrl = 'https://graph.microsoft.com/v1.0/Groups/'
$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get
$Groups = ($Data | select-object Value ).Value
$Groups | Format-Table DisplayName, Description -AutoSize
アクセストークン取得
前回登録したアプリでアクセストークンを取得します。
アクセストークンには、アプリ自体とアプリに付与されているアクセス許可に関する情報が含まれており、このアクセストークンを取得してGraph APIを利用可能にし、Microsoft Graphにアクセスして情報を取得します。
2行目~13行目でアクセストークンを取得します。
2行目:Azure ADで登録したアプリの「アプリケーション(クライアント)ID」を入力します。
3行目:「アプリを登録したテナントのドメイン」を入力します。
4行目:Azure ADで登録したアプリの「クライアント シークレット」を入力します。
※今回クライアント シークレットはハードコーディングしていますが、パスワードと同じ扱いをする必要があるため、実稼働する場合は暗号化するなどしてください。
$clientid = "<アプリケーション(クライアント)ID>"
$tenantName = "<アプリを登録したテナントのドメイン> 例(QiitaTest2020.onmicrosoft.com)"
$clientSecret = "<クライアント シークレット>"
6行目~11行目で「クライアント資格情報による認証」を実施します。
$ReqTokenBody = @{
Grant_Type = "client_credentials"
Scope = "https://graph.microsoft.com/.default"
client_Id = $clientID
Client_Secret = $clientSecret
}
13行目でアクセストークンを取得します。
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
Graph APIの指定
17行目:Graph APIを指定します。指定するGraph APIは下記手順に従って確認します。
$apiUrl = '<Graph API>' 例('https://graph.microsoft.com/v1.0/Groups/')
ソースコードに記載するGraph APIを探す方法
1.下記URLにアクセスします。
アクセスした際にサインインする必要はありません。
(https://developer.microsoft.com/ja-jp/graph/graph-explorer#)
2.左側メニューの「サンプル クエリの検索」で、利用するAPIをキーワード検索します。
3.左側メニューから利用するAPIをクリックします。
4.画面上部にAPIが表示されるのでコピーします。
「自分の組織内のすべてのグループ」の場合は https://graph.microsoft.com/v1.0/groups です。
Graph APIの実行
18行目:Graph APIを実行します。
$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $apiUrl -Method Get
19行目:Graph APIを通して取得したデータから、「Value」のみを抽出します。
20行目:Valueから「表示名」列と「説明」列を抽出します。
$Groups = ($Data | select-object Value ).Value
$Groups | Format-Table DisplayName, Description -AutoSize
取得結果
実行した結果、こんな感じで情報を取得できました。
displayName description
----------- -----------
テストチーム5 説明文5
テストチーム2 説明文2
PowerShell作成チーム1 説明文
テストチーム3 説明文3
テストチーム4 説明文4
取得した結果はソート順、抽出条件、表示件数を指定していません。
20行目を下記のどれかに変更することでソート順、抽出条件、表示件数を調整できます。
# オプション例--------------------------------
# フィルター
$Groups | Where-Object {$_.description -match "^説明文*"} | Format-Table DisplayName, Description -AutoSize
# ソート順変更(-Descending:降順、未入力:昇順)
$Groups | Sort-Object Description -Descending | Format-Table DisplayName, Description -AutoSize
# 表示数変更(-First:先頭から〇個、-Last:末尾から〇個)
$Groups | select-Object -First 3 | Format-Table DisplayName, Description -AutoSize
# フィルター 表示数 表示列(左から順に実行されていく、フィルターと表示数の定義が逆になると結果も変わってしまう)
$Groups | Where-Object {$_.description -match "^説明文*"} | select-object -first 3 | Format-Table DisplayName, Description -AutoSize
参考ページ
CONNECT AND NAVIGATE THE MICROSOFT GRAPH API WITH POWERSHELL
https://www.thelazyadministrator.com/2019/07/22/connect-and-navigate-the-microsoft-graph-api-with-powershell/#Admin_Consent
PowerShellでMicrosoft Graph APIを使用する
https://adamtheautomator.com/microsoft-graph-api-powershell/
リストグループ(MS公式サイト)
https://docs.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0&tabs=http
Graph エクスプローラー(MS公式サイト)
https://developer.microsoft.com/ja-jp/graph/graph-explorer
Author And Source
この問題について(Microsoft GraphAPIをつかってみよう。-- 実践 編--), 我々は、より多くの情報をここで見つけました https://qiita.com/kura_yu/items/772d68498eb47de09cf8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .