LoginSignup
0
0

More than 3 years have passed since last update.

Microsoft Graph API で差分取得(Delta Query) を試してみる

Last updated at Posted at 2021-05-03

ブログからの転載

経緯

別チームの仕事だけど、Microsoft Graph API を使って差分取得してのデータ同期とかいう楽しそうなことをやっていると聞いたので、興味が湧いたので少し試してみたいというのが動機

PowerShell で確認してみる(それぐらいなら Graph Explorer とか Postman 使えよという声も聞こえそうですががが)

環境

  • Windows 10 Pro
  • PowerShell 7.1.3

1. 前準備

PowerShell から Graph API を呼び出すために下記のことを行います
1. Azure AD にアプリの登録
2. アプリにアクセス許可
3. シークレットの発行を行い必要な情報を控える

1-1. Azure AD にアプリの登録

  1. Azure Portal から Azure AD を開き、リソースメニュー 管理 から [ アプリの登録 ] をクリック
  2. [ + 新規登録 ]をクリック
  3. 下記のように入力して [ 登録 ] をクリック
    • 名前: Delta Query を試すゾ
    • サポートされているアカウントの種類: この組織ディレクトリのみに含まれるアカウント
    • リダイレクトURI:未入力

以上でアプリの登録は完了です

1-2. アプリにアクセス許可

  1. 作成したアプリ Delta Query を試すゾ のリソースメニュー 管理 から [ API のアクセス許可 ] をクリック
  2. [ Microsoft Graph ] をクリック
  3. [ アプリケーションの許可 ] をクリック
  4. User 内の User.Read.All にチェックを入れ、[ アクセス許可の追加 ] をクリック
  5. 画面下の [エンタープライズ アプリケーション] をクリック
  6. [ {テナント名} に管理者の同意を与えます ] をクリック
  7. [ 承諾 ] をクリック
  8. [ 更新 ] をクリックして、管理者の同意が付与されていることを確認

以上でアクセス許可は完了です

1-3. シークレットの発行を行い必要な情報を控える

  1. 作成したアプリ Delta Query を試すゾ のリソースメニュー [ 概要 ] をクリックして、アプリケーション (クライアント) ID の値を控える
  2. リソースメニュー 管理 から [ 証明書とシークレット ] をクリック
  3. クライアント シークレットの [ + 新しいクライアント シークレット ] をクリック
  4. 下記のように入力して [ 追加 ] をクリック
    • 説明: PowerShell で Delta Query を試す
    • 有効期限: 6か月 ※推奨らしい
  5. を控える

以上でシークレットの作成と、必要な情報を控えるは完了です

2. PowerShell で差分取得を試してみる

ここでは、手順 1 で控えた アプリケーション (クライアント) IDシークレットの値 を利用して Graph API を呼び出し、差分取得は Delta Query と呼ばれる方法で行う

  1. 好きな方法で PowerShell 7 の起動

  2. 下記コマンドを実行して、Graph API のトークンを取得

    $tenantDomain = "<組織名>.onmicrosoft.com" 
    $clientId     = "<手順 1-3 の 1 で取得したクライアントID>"
    $clientSecret = "<手順 1-3 の 5 で取得した値>"
    
    $body = @{
        Grant_Type    = "client_credentials"
        Scope         = "https://graph.microsoft.com/.default"
        client_Id     = $clientId
        Client_Secret = $clientSecret
    }
    
    $connectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantDomain/oauth2/v2.0/token" -Method POST 
    -Body $body
    

    確認したところ、トークンは access_token に入っている

    $connectGraph
    

    結果例

  3. 下記コマンドを実行して、Delta Query でユーザー情報を取得

    $token = $connectGraph.access_token
    $uri = "https://graph.microsoft.com/v1.0/users/delta"
    $headers = @{Authorization = "Bearer $($token)"}
    $response = Invoke-RestMethod -Method Get -Headers $headers -Uri $uri
    

    データが返ってきていることを確認

    $connectGraph | Format-List *
    


    value に値が入っているようなので、Azure AD のユーザー件数と比較したところ一致

  4. nextLink を踏む

    $nextLink = $response.'@odata.nextLink'
    $nextResponse = Invoke-WebRequest -Method GET -Headers $headers -Uri $nextLink
    

    レスポンスを確認したら、deltaLink というのがある

    $nextResponse
    


    この deltaLink を使って差分を確認する

  5. デモユーザー11 を情報を修正して deltaLink を踏む

    $deltaLink = ($nextResponse.Content | ConvertFrom-Json).'@odata.deltaLink'
    $updateResponse = Invoke-WebRequest -Method GET -Headers $headers -Uri $deltaLink
    

    レスポンスを確認

    $deltaData = ($updateResponse.Content | ConvertFrom-Json)
    $deltaData | Format-List *
    


    更新したデモユーザー11が、value に入っている

考察

大体動き判ったので、次は色々なパターンで試してみる

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0