Ejercicio: Autorización del acceso a la API Microsoft Graph con MSAL

Completado

En este ejercicio, configurará la aplicación con permisos y usará MSAL para acceder a la información del perfil de usuario desde la API de Microsoft Graph (MS Graph).

Adición de permisos de Microsoft Graph al registro de aplicaciones

Los servicios web protegidos por Microsoft Entra ID definen un conjunto de permisos que proporcionan acceso a la funcionalidad de API y a los datos expuestos por ese servicio. Para que una aplicación pueda acceder a los datos o actuar en nombre de un usuario, debe solicitar que estos permisos sean aprobados por los usuarios. Puede asignar estos permisos de API al registro de la aplicación desde Azure Portal. Estos son los pasos para asignar permisos de la API Microsoft Graph a la aplicación.

  1. En la pantalla Registros de aplicaciones, seleccione Permisos de API para agregar acceso a las API que necesita la aplicación.

    Captura de pantalla que muestra el menú del panel permisos de API de una aplicación registrada con Microsoft Entra ID en Azure Portal.

    • Selecciona Agregar permiso.

    • Asegúrese de que la pestaña API de Microsoft esté seleccionada.

    • En la sección API de Microsoft usadas habitualmente, seleccione Microsoft Graph y, a continuación, seleccione Permisos delegados.

    • En la sección Permisos delegados, desplácese hacia abajo y seleccione User.Read en la lista. Este permiso concreto es para acceder a la información del usuario que ha iniciado sesión desde el punto de conexión https://graph.microsoft.com/v1.0/me.

    • Selecciona Agregar permisos.

      Captura de pantalla que muestra el panel permisos de API de una aplicación registrada con Microsoft Entra ID en Azure Portal.

Ejecución de la aplicación

Puede probar la llamada Graph API en la aplicación que ha ejecutado en el ejercicio anterior.

  1. Abra el explorador web y vaya a http://localhost:8080/msal4j-servlet-graph/. Si aún no ha iniciado sesión, se le redirigirá para que lo haga con Microsoft Entra ID. Al iniciar sesión correctamente, debería ver una página como se muestra en la siguiente imagen.

    Captura de pantalla que muestra el botón para llamar a Graph mostrado en la página después de iniciar sesión correctamente en la aplicación de ejemplo.

  2. Seleccione Llamar a Graph para realizar una llamada al punto de conexión de /me de Microsoft Graph y ver los detalles del usuario mostrados.

Información general sobre el código para acceder a Microsoft Graph

Puede encontrar el código para acceder a Microsoft Graph API en la clase servlet CallGraphServlet.java en el directorio msal4j/callgraphwebapp/ del proyecto de ejemplo. Define el punto de conexión /call_graph de la aplicación que realiza llamadas autorizadas al punto de conexión https://graph.microsoft.com/v1.0/me de la API Microsoft Graph para recuperar la información de perfil del usuario que ha iniciado sesión. A continuación se muestran más detalles del código de acceso de Graph.

  1. En el archivo ./src/main/resources/authentication.properties, el valor de aad.scopes se establece en el ámbito User.Read.

    Los ámbitos indican a Microsoft Entra ID el nivel de acceso que la aplicación solicita y se asignan a los permisos en el registro de la aplicación. En función de los ámbitos solicitados, Microsoft Entra ID presenta un cuadro de diálogo de consentimiento al usuario cuando inicia sesión. Si el usuario da su consentimiento a uno o varios ámbitos, se codifican en el objeto access_token resultante que se devuelve en la respuesta de autenticación.

  2. Cuando el usuario navega a /call_graph, la aplicación crea una instancia de IGraphServiceClient (SDK de Java de Microsoft Graph) y se pasa el token de acceso del usuario que ha iniciado sesión. Desde aquí, el cliente de Graph coloca el token de acceso en los encabezados de autorización de sus solicitudes. Después, la aplicación solicita al cliente de Graph que llame al punto de conexión /me de Microsoft Graph para devolver los detalles del usuario que ha iniciado sesión actualmente.

    El código siguiente es todo lo que tiene que escribir un desarrollador de aplicaciones para acceder al punto de conexión /me, siempre que ya tenga un token de acceso válido para Graph Service con el ámbito User.Read.

    //CallGraphServlet.java
    User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();