Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
Círculo verde de inquilinos de recursos
Inquilinos externos (más información)
En este tutorial, llamará a Microsoft Graph API desde una aplicación web de Python Flask. En el tutorial anterior, agregó las experiencias de inicio de sesión y cierre de sesión a la aplicación. Una vez que un usuario inicia sesión, la aplicación adquiere un token de acceso para llamar a Microsoft Graph API.
En este tutorial, usted hará lo siguiente:
- Actualización de una aplicación web de Python Flask existente para adquirir un token de acceso
- Use el token de acceso para llamar a Microsoft Graph API.
Prerrequisitos
Complete los pasos descritos en Tutorial: Adición del inicio de sesión a una aplicación web de Python Flask mediante la plataforma de identidad de Microsoft.
Definición de ámbitos y punto de conexión de API
En este ejemplo, llamamos a Microsoft Graph API para obtener la información del perfil del usuario que ha iniciado sesión. Si la aplicación está en un inquilino del personal, en el inicio de sesión, el usuario da su consentimiento a los ámbitos requeridos por la aplicación para acceder a Microsoft Graph API. Si la aplicación está en un inquilino externo, asegúrese de conceder el consentimiento del administrador en nombre de los usuarios del inquilino. A continuación, la aplicación usa el token de acceso para llamar a la API y mostrar los resultados.
En el archivo .env , agregue el punto de conexión al que llamamos y los ámbitos necesarios para llamar a Microsoft Graph API:
SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me
Lea las nuevas configuraciones de la aplicación actualizando el archivo app_config.py .
# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")
Llamada a una API protegida
Pase el punto de conexión de API a la página principal. Esto le permite llamar al punto de conexión. Actualice la
/ruta para que tenga el aspecto que se muestra en el siguiente fragmento de código:@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", api_endpoint=os.getenv("ENDPOINT") # added this line )Llame a la API de Microsoft Graph protegida como se muestra en el siguiente fragmento de código. Pasamos la lista de ámbitos que nuestra aplicación necesita usar. Si los ámbitos están presentes, el contexto contiene un token de acceso. El token de acceso se usa para llamar a la API de bajada. Agregue este código al archivo app.py :
@app.route("/call_api") @auth.login_required(scopes=os.getenv("SCOPE", "").split()) def call_downstream_api(*, context): api_result = requests.get( # Use access token to call a web api os.getenv("ENDPOINT"), headers={'Authorization': 'Bearer ' + context['access_token']}, timeout=30, ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?" return render_template('display.html', title="API Response", result=api_result)Si la aplicación obtiene correctamente un token de acceso, realiza una solicitud HTTP a la API de bajada mediante el
requests.get(...)método . En la solicitud, se especifica la dirección URL de la API de bajada enapp_config.ENDPOINTy el token de acceso pasado en elAuthorizationcampo del encabezado de solicitud.Una solicitud correcta a la API de bajada (Microsoft Graph API) devuelve una respuesta JSON almacenada en una
api_resultvariable y se pasa a la plantilla para sudisplay.htmlrepresentación.
Mostrar los resultados de la API
Cree un archivo denominado display.html en la carpeta templates . En esta página se muestra el resultado de la llamada al punto de conexión de Microsoft Graph. Agregue el código siguiente al archivo display.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>{{title}}</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</body>
</html>
Ejecución y prueba de la aplicación web de ejemplo
En el terminal, ejecute el siguiente comando:
python3 -m flask run --debug --host=localhost --port=3000Puede usar el puerto que prefiera. Este puerto debe ser similar al puerto del URI de redirección que registró anteriormente.
Abra el explorador y vaya a
http://localhost:3000. Verá una página de inicio de sesión.Inicie sesión con su cuenta microsoft siguiendo los pasos. Se le pedirá que proporcione una dirección de correo electrónico y una contraseña para iniciar sesión.
Si la aplicación necesita algún ámbito, se presenta una pantalla de consentimiento. La aplicación solicita permiso para mantener el acceso a los datos a los que permite el acceso y para iniciar sesión. Seleccione Aceptar. Esta pantalla no aparece si no se define ningún ámbito.
Llamada a la API
Seleccione el vínculo Llamar a una API en la página principal. La aplicación llama a Microsoft Graph API para obtener la información de perfil del usuario que ha iniciado sesión. La aplicación muestra el resultado de la llamada a la API.
Seleccione Cerrar sesión para cerrar la sesión de la aplicación. Se le pedirá que elija una cuenta para cerrar la sesión. Seleccione la cuenta que usó para iniciar sesión.
Material de referencia
El ms_identity_python abstrae los detalles de la biblioteca MSAL. Para obtener más información, consulte la documentación de PYTHON de MSAL. Este material de referencia le ayuda a comprender cómo inicializar una aplicación y adquirir tokens mediante MSAL Python.