クラウドエンジニアブログ

MS Graph API でユーザーの最終サインイン⽇時を取得する⽅法 (前編)

渡邊 正和

渡邊 正和

元気ですか?元気です。

どうも渡邊です。
最近寒くなってきて、早起きが苦手になってきました。

さて、今回は Microsoft Graph API を使った Azure AD アカウントの最終サインイン日時の取得方法をご紹介します。




「Microsoft Azure 導入・運用支援サービス」はこちら


はじめに

Teams のゲスト招待を筆頭に、自社の Azure AD に他社のユーザーをゲスト登録してサービスを利用してもらうという利用スタイルが一般的になってきました。
そんな中で、ゲストアカウントの ID が自社の Azure AD に残り続けるという問題が生じてきます。
不要なアカウントは不要になった時点で無効化するのが ID セキュリティの鉄則でもあります。
そんな ID 管理において、最終サインイン日時の定期的なチェックは必要不可欠なものです。

一方で、Azure AD ではユーザー毎に最終サインイン日時を出力する機能が弱く、サインインログベースの情報しか出力できません。
サインインログベースの情報では、サインインログのエントリが無いユーザーは出力されず、複数のサインインログがあるユーザーは複数のサインイン日時が出力されるため、少し扱い難いデータとなります。

この不便さを解消するために、Microsoft Graph API (以下、MS Graph とします。) を使ってユーザー毎に最終サインイン日時する方法を確立しておこう!というのが今回のブログ記事の趣旨になります。

「Microsoft Azure 導入・運用支援サービス」はこちら


この記事でお伝えしたいこと

この記事でお伝えしたいことは、ざっくり以下の 2点です。

  1. MS Graph はそんなに難しくない!
  2. MS Graph が利用できるようになると、運用が楽になるはず!

ということで、早速本題に入っていきます。

「Microsoft Azure 導入・運用支援サービス」はこちら


1.まずは準備 (MS Graph を利用できるようにしよう!)

さて、まずは MS Graph を利用するための準備をしなくてはいけません。
最初に以下の手順で MS Graph を利用するための準備をします。

  1. Azure AD へアプリケーション登録
  2. API のアクセス許可
  3. シークレットの発行

※これらの操作には Azure AD の管理者権限が必要になります。


Azure AD へアプリケーション登録

Azure AD 管理センターにアクセスして、[アプリの登録] から [新規登録] を選択します。

Azure AD へアプリケーション登録1




続いて、わかりやすい名前を付けて [登録] します。
このブログ記事では、「Last_SginIn_Checker」という名前でアプリケーション登録することにします。
"サポートされているアカウントの種類" は「この組織ディレクトリに含まれるアカウント」(デフォルト) にします。
また、"リダイレクト URI" は省略します。

Azure AD へアプリケーション登録2




アプリケーション登録が完了すると以下のような画面が表示されます。
MS Graph の利用時の認証に赤枠内の情報を利用するので、メモ帳等に控えておきましょう。

Azure AD へアプリケーション登録3



API のアクセス許可

アプリケーション登録ができたので、API のアクセス許可を設定します。
今回、サインイン日時の取得に利用するのは、User オブジェクトの signInActivity プロパティになります。(現在は Beta バージョンでの提供)
まずは、対象のリファレンスを参照して、必要なアクセス権を確認します。
アクセス許可は以下のようになっています。

アクセス許可の種類 アクセス許可 (特権の⼩さいものから⼤きいものへ)
委任 (職場または学校のアカウント) User.ReadBasic.All、User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All、Directory.AccessAsUser.All
委任 (個⼈⽤ Microsoft アカウント) サポートされていません
アプリケーション User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All

今回はアプリケーションとして最終サインイン日時を読み取るだけなので、"アクセスの許可の種類" が「アプリケーション」、 "アクセスの許可" が「User.Read.All」になります。

設定すべきアクセス許可が確認できたので、実際に API のアクセス許可を設定します。
[API のアクセス許可] から [アクセス許可の追加] を選択します。

API のアクセス許可1




API アクセス許可の要求から [Microsoft Graph] を選択します。

API のアクセス許可2




[アプリケーションの許可] を選択します。

API のアクセス許可3




[User.Read.All] をチェックして [アクセス許可の追加] を選択します。

API のアクセス許可4




[User.Read.All] が追加されました。

API のアクセス許可5




ただし、このままの状態ではまだアクセス許可が付与されていません。
管理者の同意を与えることで、アクセス許可が付与されます。

API のアクセス許可6



API のアクセス許可7




アクセス許可が付与されると、次のような表示になります。

API のアクセス許可8



シークレットの発行

アクセス許可が設定できたので、最後にシークレットを発行します。
シークレットはアプリケーションのパスワードにあたります。

それでは、設定していきます。
まずは、[証明書とシークレット] から [新しいクライアント シークレット] を選択します。

シークレットの発行1




説明と有効期限を設定して [追加] します。

シークレットの発行2




シークレットを発行すると、次のような表示になります。
[値] の部分がシークレットになりますので、メモ帳等に控えておきます。

シークレットの発行3




ここまでで MS Graph を利用するための準備が整いました。
引き続き、動作確認をしていきましょう。


「Microsoft Azure 導入・運用支援サービス」はこちら


2.動作確認 (API リクエストを送信するツール "Postman" を使って)

動作確認には Postman というツールを利用します。
Postman は REST API を呼び出すことのできるツールで、Microsoft の公式ドキュメントでも紹介されています。
今回はこのツールを利用して、実際に Azure AD アカウントの最終サインイン日時を取得してみます。
なお、Postman はこちらのリンクからダウンロードできます。

Postman で行う動作確認は以下の手順で行います。 (MS Graph を利用する場合には原則この手順になります。)

  1. アクセストークンの取得
  2. 最終サインイン日時を取得するクエリの発行

アクセストークンの取得

それでは、Postman を使ってアクセストークンを取得します。
アクセストークンを取得するためには、アプリケーション登録で確認した情報を利用します。
具体的には以下の情報になります。

  • テナント ID
  • アプリケーション ID
  • シークレット

Postman を起動すると、以下のような画面になります。
この画面に必要情報を入力してアクセストークンを取得します。

アクセストークンの取得1




入力する情報は以下の通りです。
  • メソッド
    • POST
  • request URL
    • https://login.microsoftonline.com/<テナント ID>/oauth2/token
  • Body (x-www-form-urlencoded)
    • 以下の内容を設定する

KEY VALUE
grant_type POST
client_id <アプリケーション ID>
client_secret <シークレット>
resource https://graph.microsoft.com/


上記の情報を入力すると以下のようになります。

アクセストークンの取得2




情報の入力を終えたら、[Send] をクリックしてクエリを発行します。
正しく認証が通ると Response のフィールドに以下のような応答が表示されます。
この応答内容の [access_token] の箇所が MS Graph を利用する際のアクセストークンになります。
※セキュリティ情報なので、一部にモザイクをかけていますが、ダブルクォーテーションで囲まれた部分すべてがアクセストークンです。

アクセストークンの取得3




アクセストークンが取得できたら、MS Graph のクエリを発行します。
今回は最終サインイン日時と共にユーザー情報も欲しいので以下のようなクエリを発行します。

https://graph.microsoft.com/beta/users?$select=id,mail,displayname,usertype,signInActivity



このクエリで取得できる情報は以下の通りです。
  • ユーザーの ID
  • ユーザーのメールアドレス
  • ユーザーの表示名
  • ユーザーのアカウントタイプ (組織内ユーザー or ゲストユーザー)
  • ユーザーの最終サインイン日時
    ※[$select] 以降の記述で取得したいプロパティ名を指定すれば上記以外の情報も取得できます。

ここまでで確認したアクセストークンと MS Graph のクエリを Postman に仕込むと以下のようになります。

アクセストークンの取得4




入力する情報は以下の通りです。
  • メソッド
    • GET
  • request URL
    • https://graph.microsoft.com/beta/users?$select=id,mail,displayname,usertype,signInActivity
  • Authorization
    • TYPE : Bearer Token
    • Token : 先ほど取得した [access_token]


準備ができたら、[Send] をクリックしてクエリを発行します。
正しくクエリが通ると Response のフィールドに JSON 形式で目的の情報が取得できました。

アクセストークンの取得5




「Microsoft Azure 導入・運用支援サービス」はこちら


まとめ

さて、いかがだったでしょうか?
今回は MS Graph を利用した最終サインイン日時の取得方法ご案内しました。
Azure AD のアプリケーション登録等、多少の手間はありますが、全体を通してやっていることは、とてもシンプルだということが見ていただけたと思います。
MS Graph は今回の最終サインイン日時のみならず、Microsoft 365 に関連した様々な情報を取得することができるインターフェースになっています。
ぜひ、真似して日々の運用にお役立ていただければと思います。

また次回は、今回ご紹介した MS Graph を利用して最終サインイン日時取得を自動化にチャレンジしてみようと思いますので、こちらも乞うご期待です。


それでは、今回はここまでにさせていただきます。
最後までお読みいただきありがとうございました。

「Microsoft Azure 導入・運用支援サービス」はこちら

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録