from flask import Flask, jsonify, request, send_file
from flask_cors import CORS
import logging
from msal import ConfidentialClientApplication
app = Flask(__name__)
CORS(app)
# app.config['CORS_HEADERS'] = 'Content-Type'
client_id = "clientID"
client_secret = "secret"
tenant_id = "TenantID"
msal_authority = f"https://login.microsoftonline.com/{tenant_id}"
scopes = ['https://graph.microsoft.com/.default']
msal_app = ConfidentialClientApplication(
client_id=client_id,
client_credential=client_secret,
authority=msal_authority)
result = msal_app.acquire_token_silent(
scopes=scopes,
account=None
)
if not result:
result = msal_app.acquire_token_for_client(scopes=scopes)
if "access_token" is result:
access_token = result['access_token']
else:
raise Exception("No Access Token Found")
print("access token ==================> ", access_token)
У меня есть приложение, использующее Python для подключения к API Microsoft Graph, но мне нужен токен доступа для выполнения запросов. из приведенного выше кода мне все еще не удалось получить токен доступа из библиотеки msal. может кто-нибудь указать, что я сделал не так? спасибо раньше
Чтобы подключиться к Microsoft Graph API через приложение, используйте поток acquire_token_for_client
.
acquire_token_silent
используется для получения токена из кеша, если он существует. Он используется в сценариях, когда у вас есть интерактивный сеанс пользователя и вы хотите автоматически получить новый токен, не запрашивая повторно пользователя.Я создал приложение Microsoft Entra ID и предоставил разрешения API:
Следовательно, чтобы получить токен доступа, измените код, как показано ниже:
from flask import Flask, jsonify, request
#from flask_cors import CORS
import logging
from msal import ConfidentialClientApplication
app = Flask(__name__)
#CORS(app)
client_id = "ClientID"
client_secret = "ClientSecret"
tenant_id = "TenantID"
msal_authority = f"https://login.microsoftonline.com/{tenant_id}"
scopes = ['https://graph.microsoft.com/.default']
msal_app = ConfidentialClientApplication(
client_id=client_id,
client_credential=client_secret,
authority=msal_authority
)
result = msal_app.acquire_token_for_client(scopes=scopes)
if "access_token" in result:
access_token = result['access_token']
print("Access token ==================> ", access_token)
else:
raise Exception("No Access Token Found: " + result.get("error_description", "Unknown error"))
Токен доступа успешно получен:
При декодировании отображаются роли:
Используя сгенерированный выше токен доступа, вы можете вызвать API Microsoft Graph.