. update
This commit is contained in:
44
Scripts/python/ms_graph.py
Normal file
44
Scripts/python/ms_graph.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import webbrowser
|
||||
from datetime import datetime
|
||||
import json
|
||||
import os
|
||||
import msal
|
||||
|
||||
GRAPH_API_ENDPOINT = 'https://graph.microsoft.com/v1.0'
|
||||
|
||||
def generate_access_token(app_id, scopes):
|
||||
# Save Session Token as a token file
|
||||
access_token_cache = msal.SerializableTokenCache()
|
||||
|
||||
# read the token file
|
||||
if os.path.exists('ms_graph_api_token.json'):
|
||||
access_token_cache.deserialize(open("ms_graph_api_token.json", "r").read())
|
||||
token_detail = json.load(open('ms_graph_api_token.json',))
|
||||
token_detail_key = list(token_detail['AccessToken'].keys())[0]
|
||||
token_expiration = datetime.fromtimestamp(int(token_detail['AccessToken'][token_detail_key]['expires_on']))
|
||||
if datetime.now() > token_expiration:
|
||||
os.remove('ms_graph_api_token.json')
|
||||
access_token_cache = msal.SerializableTokenCache()
|
||||
|
||||
# assign a SerializableTokenCache object to the client instance
|
||||
client = msal.PublicClientApplication(client_id=app_id, token_cache=access_token_cache)
|
||||
|
||||
accounts = client.get_accounts()
|
||||
if accounts:
|
||||
# load the session
|
||||
token_response = client.acquire_token_silent(scopes, accounts[0])
|
||||
else:
|
||||
# authetnicate your accoutn as usual
|
||||
flow = client.initiate_device_flow(scopes=scopes)
|
||||
print('user_code: ' + flow['user_code'])
|
||||
webbrowser.open('https://microsoft.com/devicelogin')
|
||||
token_response = client.acquire_token_by_device_flow(flow)
|
||||
|
||||
with open('ms_graph_api_token.json', 'w') as _f:
|
||||
_f.write(access_token_cache.serialize())
|
||||
|
||||
return token_response
|
||||
|
||||
if __name__ == '__main__':
|
||||
...
|
||||
|
||||
Reference in New Issue
Block a user