【Python】Microsoft Graphを利用する方法

【Python】Microsoft Graphを利用する方法

Microsoftのツール上ではなく、外部からMicrosoft Graphを利用したいケースがあります。

今回はPythonでMicrosoft Graphを利用する方法を紹介します。

認証情報の作成

Microsoft AzureのAzure Active Directoryから「アプリの登録」で新規登録を選択

「名前」欄でアプリの名前を入力します。任意でわかりやすい名前で登録しましょう。

「サポートされているアカウントの種類」で誰がAPIを使用できるか、範囲を指定します。

「リダイレクトURL」の入力は不要です。

ここまで入力したら画面最下部の「登録」をクリックします。

アプリ名を選択し「概要」画面を開き、2つの情報を事前にコピーしておきます。後で実際のコードに利用します。

  • アプリケーション(クライアント)ID
  • ディレクトリ(テナント)ID

「証明書とシークレット」画面を開き、新しいクライアントシークレットを追加します。

「説明」欄は任意の説明を登録します。

「有効期限」は選択肢の中から選択して、最後に下の「追加」を選択します。

画面上に今登録した内容で「値」と「シークレットID」が表示されるので、コピーしておきます。

「値」はしばらくすると伏せ字に変更されます。後から確認できなくなりますので、必ずコピーして控えて置いてください。

「APIのアクセス許可」画面で、アクセスする権限内容の設定をします。

最初から作成されているUser.Readは使用しないので、削除します。

「アクセス許可の追加」から「Microsoft Graph」を選択します。

設定する内容はMicrosoft learnの記事を参考に設定をしてください。

例えば、SharePointリストにデータを追加する場合は、下記の「Sites.ReadWrite.All、Sites.Manage.All、Sites.FullControl.All」のいずれかを選択します。

アクセス許可の種類アクセス許可 (特権の小さいものから大きいものへ)
委任 (職場または学校のアカウント)Sites.Read.All、Sites.ReadWrite.All、Sites.Manage.All、Sites.FullControl.All
委任 (個人用 Microsoft アカウント)サポートされていません。
アプリケーションSites.Read.All、Sites.ReadWrite.All、Sites.Manage.All、Sites.FullControl.All

Pythonのコード

今回利用するライブラリは下記の2つです。インストールしてない場合は下記コードでインストールしておいてください。

pip install msal
pip install requests

今回実施したバージョンは下記です。

msal 1.23.0
requests 2.26.0

早速ですが、こちらがコード全文です。

import msal
import requests
# MSALの設定
authority = 'https://login.microsoftonline.com/<YOUR_TENANT_ID>'
client_id = '<YOUR_CLIENT_ID>'
scope = ['https://graph.microsoft.com/.default'] # スコープを指定
app = msal.ConfidentialClientApplication( client_id, authority=authority, client_credential="<YOUR_CLIENT_SECRET>" # クライアントシークレットを指定
)
result = app.acquire_token_silent(scope, account=None)
if not result: # キャッシュされたトークンがない場合、新たにトークンを取得する result = app.acquire_token_for_client(scopes=scope)
if "access_token" in result: # アクセストークンを取得 access_token = result["access_token"] # APIのURLを指定 api_url = "https://graph.microsoft.com/v1.0/<resource>" headers = { 'Authorization': 'Bearer ' + access_token, "Content-Type": "application/json" } data={ # APIのクエリ等をここに } response = requests.post(api_url, headers=headers, json=data) if response.status_code == 201: print("成功") else: print(f"◯◯に失敗しました。. Status code: {response.status_code}")
else: print("MSAL での認証に失敗しました。")

手順1:テナントIDなどをメモした値に置き換える

「<YOUR_TENANT_ID>」や、「<YOUR_CLIENT_ID>」、「<YOUR_CLIENT_SECRET>」は上の手順でメモをした値に置き換えてください。

手順2:スコープについて

スコープを指定する場所があります。完全に理解はしていませんがが、少し解説します。
(間違いがあればご指摘ください)

scope = ['https://graph.microsoft.com/.default'] # スコープを指定

ユーザーに変わってアクセスする(ユーザー委任のアクセス許可)際に、スコープを設定する必要があり、行うレベルに応じて設定をします。

構文は下記の通り。

ResourceId + <スコープ>

スコープとして設定できる値と内容の一部は下記の通り。それ以外の内容は公式の記事などを確認してください。

内容
.defaultすべてのスコープ
user_impersonation
user.readユーザーの基本的なプロファイル情報を読み取る
mail.readユーザーのメール情報を読み取る
calendars.readユーザーのカレンダー情報を読み取る
files.readユーザーのファイル情報を読み取る
Directory.ReadAzure ADの読み取り
Directory.WriteAzure ADの書き込み

手順3:APIについて

api_url等はMicrosoft Graphで利用するURLをそのまま入力し、dataにはリクエストbodyを入力します。不要な場合は削除してください。

URlなどは下記の公式記事を確認してください。

トークンの有効期間について

取得したアクセストークンは60~90分で期限が切れます。行いたい処理によっては1時間を超える場合は注意が必要です。

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA