今までPostmanとかGraph エクスプローラーからの利用方法でしたが、実際、Pythonなどのプログラミング言語を利用した使い方を記載していないなぁ~と思い。備忘録も兼ねて記載してみました。
基本的には、認証してGraph APIを呼び出すので、PostmanとかGraph エクスプローラーでの利用と変わらないですね。
Pythonのアプリの登録
Graphエクスプローラーではあまり意識しませんでしたが、Postmanと同様にEntra管理センターでアプリケーションの登録とアクセス権の登録が必要になります。
アプリケーションを登録して、プログラムからアクセスするためのIDなどを取得するとともに利用するGraph APIによって、アクセス権を許可します。アクセス権の許可を行うのを忘れると、Graph APIはパーミッションエラーとなりますので、その場合には、再度、Entra管理センターで付与することができます。
Graph APIを利用するための認証
Graph APIを呼び出す場合の認証方法として、事前にアカウントで利用者にサインインしてもらいその認証を利用する「ユーザ委任」という認証と、事前にアプリ登録で取得したシークレットコードを利用した「アプリケーション認証」があります。扱えるデータの範囲も変わってくるのですが、アプリケーションを前提に考えると今回は「アプリケーション認証」で認証を行おうと思います。
下がPythonで記載したコードになります。これで認証ができました。
import json
import requests
tennant_id = 'テナントid'
client_id = 'クライアントID'
client_secret = 'シークレットコード'
scope = 'https://graph.microsoft.com/.default'
grant_type = 'client_credentials'
graph_url = 'https://graph.microsoft.com/v1.0'
def get_access_token():
url = 'https://login.microsoftonline.com/{tennant_id}/oauth2/v2.0/token'.format(**{
'tennant_id': tennant_id
})
data = {
'client_id': client_id,
'scope': scope,
'client_secret': client_secret,
'grant_type': grant_type
}
headers = {
'Content-Type': 'application/x-www-form-urlencoded'
}
res = requests.post(url=url, data=data, headers=headers)
return json.loads(res.text).get('access_token')
if __name__ == '__main__':
print(get_access_token())
Graph APIの呼び出し
上の認証が終わったら、次に行うのは、実際のGraphAPIを呼び出します。下のプログラムは、引数でGraphAPIのURIを設定して、実行することでレスポンスを取得します。
import codecs
import json
import requests
from app import graph_url
from app.get_access_token import get_access_token
def graph_api(service):
url = '{graph_url}{service}'.format(**{
'graph_url': graph_url,
'service': service
})
res = requests.get(url=url, headers=headers)
if __name__ == '__main__':
graph_api(service='/sites/{hostname}:/{server-relative-path}')