Microsoft Graph APIを使用したEntra IDからの情報取得
1. はじめに
Microsoft Graph APIとは:
Microsoft 365、Entra IDを操作するAPI。このAPIを使用することで、ユーザーやグループ情報、メールなど、Microsoftクラウドリソースにアクセスでます。
Entra IDとは:
MicrosoftのID管理サービスで、Microsoft 365、Azure portalnなどの管理を提供。
記事の目的:
「Microsoft Graph APIを活用してEntra IDから情報を取得する方法」を解説しMicrosoft Graph APIの理解を深めることを目的としています。
2. Microsoft Graph APIを活用してEntra IDから情報を取得するために必要な事前準備
2.1 Microsoft Entra IDを利用して認証・認可を行うために必要なアプリケーションのエントリを登録
1.「アプリの登録」メニューを開き、「+ 新規登録」をクリック。
2.次の項目を入力して登録をクリック。
名前: test1
2.2 作成したアプリケーションのアプリケーション (クライアント) IDの確認
- 概要タブからアプリケーション (クライアント) IDを確認します。
これは後ほど記載しているプログラムのclient_id = "YOUR_CLIENT_ID"
に記載します。
2.3 作成したアプリケーションに対してクライアントシークレット(アプリケーションとMicrosoft Entra ID間の通信担保のため)の作成
- 左側メニューの「証明書とシークレット」を開く。
「+ 新しいクライアントシークレット」をクリック。
2.次の項目を入力し追加をクリック。
名前: test
3.作成後に表示されるクライアントシークレットの値を確認します。シークレットIDではありません。こちらをプログラムのclient_secret = "YOUR_CLIENT_SECRET"
に記載します。
注意:
シークレット値は一度しか表示されないようです。
2.4 アプリケーションに権限の追加
1.左側メニューの「APIのアクセス許可」を開き「+ アクセス許可の追加」をクリック。
2.「Microsoft Graph」を選択。
3.「アプリケーションの権限」を選択次の項目を入力して登録をクリック。
アクセス許可:User.Read.All,Group.Read.All(実施したプログラムによって権限は変わります)
2.5 Python環境の構築
- Python のインストール
以下URLからダウンロード。インストール時に「Add Python to PATH」にチェックを入れておいた方が良いです。
インストール後は以下のように確認で来ます。
PS C:\work\Azure> python --version
Python 3.13.0
- requests のインストール
requests を使うと、HTTPリクエストを簡単に記述できるためインストールを行います。requestsの詳細は以下のURLがわかりやすいかと思います。
https://ai-inter1.com/python-requests/
PS C:\work\Azure> pip install requests
3. Microsoft Graph APIを使った情報取得
以下のプログラムを実行しユーザー情報取得とグループ情報取得を実施しています。
トークンを取得してそのトークンからアクセスを行い情報の取得といった流れです。
import requests
# Azure AD認証情報
tenant_id = "YOUR_TENANT_ID" # ディレクトリID
client_id = "YOUR_CLIENT_ID" # アプリケーションID
client_secret = "YOUR_CLIENT_SECRET" # クライアントシークレットの値(IDではない)
auth_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
# トークン取得
def get_access_token():
payload = {
"client_id": client_id,
"client_secret": client_secret,
"grant_type": "client_credentials",
"scope": "https://graph.microsoft.com/.default",
}
response = requests.post(auth_url, data=payload)
response.raise_for_status()
return response.json()["access_token"]
# ユーザー情報取得
def get_all_users(access_token):
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get("https://graph.microsoft.com/v1.0/users", headers=headers)
response.raise_for_status()
return response.json()
# グループ情報取得
def get_all_groups(access_token):
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get("https://graph.microsoft.com/v1.0/groups", headers=headers)
response.raise_for_status()
return response.json()
if __name__ == "__main__":
token = get_access_token()
# ユーザー情報の取得
users = get_all_users(token)
print("ユーザー情報:")
for user in users["value"]:
print(f"名前: {user['displayName']}, メール: {user['mail']}")
# グループ情報の取得
groups = get_all_groups(token)
print("\nグループ情報:")
for group in groups["value"]:
print(f"グループ名: {group['displayName']}, ID: {group['id']}")
実行結果として以下の値が返ります。xxxxでマスクしていますが、ユーザ情報とグループ情報が正しく返ってきます。
PS C:\work\Azure> python main.py
ユーザー情報:
名前: admin1, メール: None
名前: user1, メール: None
名前: Aki Xxxxx, メール: xxxx.xxxx@gmail.com
グループ情報:
グループ名: AAD DC Administrators, ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
グループ名: prod__admin_group, ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
グループ名: prod_user_group, ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
グループ名: 既定のディレクトリ, ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
キャプチャ↓
4. まとめ
Microsoft Graph APIを活用することで、Entra IDのユーザー情報やグループ情報を効率的に取得できる!
Discussion