Autorización del acceso a las API con la biblioteca de autenticación de Microsoft

Completado

Ahora puede iniciar la sesión de los usuarios de la empresa en la aplicación web. A continuación, quiere mostrar información como su puesto, el correo electrónico del trabajo, etc., de su perfil de empleado en la página. Descubre que la API Microsoft Graph proporciona acceso a datos relacionados con el usuario.

En esta unidad, va a aprender cómo MSAL puede ayudarle a obtener acceso autorizado a servicios de Microsoft, como a la API Microsoft Graph.

Permisos y ámbitos de API

Los servicios web protegidos por Microsoft Entra ID definen un conjunto de permisos que proporcionan acceso a la funcionalidad de API a los datos que expone el servicio. Una aplicación puede solicitar estos permisos a los usuarios y administradores, quienes deben aprobar la solicitud para que la aplicación pueda acceder a los datos o actuar en nombre de un usuario. Por ejemplo, Microsoft Graph tiene permisos definidos para realizar, entre otras, las tareas siguientes:

  • Leer el calendario de un usuario
  • Escribir en el calendario de un usuario
  • Enviar correo como un usuario

Usuarios y administradores pueden ejercer el control y saber a qué datos puede acceder la aplicación. Para que la aplicación pueda acceder a una API protegida por Microsoft, tiene que proporcionarle permisos para realizar las acciones.

Microsoft Entra ID admite dos tipos de permisos: permisos delegados y permisos de aplicación.

  • Permisos delegados: se utilizan en aplicaciones que tienen un usuario con la sesión iniciada. Para estas aplicaciones, el usuario o un administrador dan su consentimiento para los permisos que la aplicación requiere. A la aplicación se le delega el permiso para actuar como el usuario que ha iniciado sesión cuando realiza llamadas a la API de destino. Algunos permisos con privilegios elevados necesitan el consentimiento de un administrador.

  • Permisos de aplicación: los usan las aplicaciones que se ejecutan sin la presencia de un usuario con la sesión iniciada; por ejemplo, las aplicaciones que se ejecutan como demonios o servicios en segundo plano. Solo un administrador puede dar su consentimiento para los permisos de aplicación.

Puede asignar estos permisos de API al registro de la aplicación desde Azure Portal.

Ámbitos

Microsoft Entra ID implementa el protocolo de autorización OAuth 2.0, mediante el cual una aplicación puede acceder a recursos hospedados en la web en nombre de un usuario.

En OAuth 2.0, estos tipos de conjuntos de permisos se denominan ámbitos. Al realizar una solicitud de autorización a Microsoft Entra ID, una aplicación solicita los permisos que necesita especificando el permiso en el parámetro de consulta scope de la solicitud. Por ejemplo, se usa el valor de ámbito https://graph.microsoft.com/Calendars.Read a fin de solicitar permiso para leer los calendarios del usuario en Microsoft Graph.

Adquisición de tokens de acceso con MSAL

Los tokens de acceso permiten a las aplicaciones cliente llamar de forma segura a las API web protegidas por Microsoft Entra ID. Hay muchas maneras de adquirir un token de acceso mediante la biblioteca de autenticación de Microsoft (MSAL). En general, la manera de adquirir un token depende de si la aplicación es una aplicación cliente pública (por ejemplo, una aplicación de escritorio o móvil) o una aplicación cliente confidencial (por ejemplo, una aplicación web, API web o de demonio).

Varios de los métodos de adquisición de tokens de MSAL necesitan un parámetro scopes, que es una lista de cadenas que declaran los permisos deseados y los recursos solicitados.

MSAL almacena en caché un token después de adquirirlo. Para las aplicaciones web que usan el flujo de código de autorización de OpenID Connect, el patrón recomendado en los controladores consiste en:

  • Intente primero obtener un token en modo silencioso desde la caché antes de intentarlo por otros medios. El código siguiente es un extracto de la implementación del método acquireTokenSilently en la clase AuthHelper.

    final SilentParameters parameters = SilentParameters
                                            .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                            .build();
    
    final ConfidentialClientApplication client = getConfidentialClientInstance();
    
    client.tokenCache().deserialize(context.getTokenCache());
    
    final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();
    
  • Si no hay ningún token en la caché y la solicitud de token silenciosa no puede obtener uno, puede adquirir el token mediante el flujo de código de autorización:

    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                                                        .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
                                                        .build();
    
    final IAuthenticationResult result = app.acquireToken(authParams).get();
    

MSAL también puede actualizar un token cuando va a expirar (ya que la caché de tokens también contiene un token de actualización).

Resultados de autenticación

Cuando el cliente solicita un token de acceso, Microsoft Entra ID también devuelve un resultado de autenticación que incluye metadatos sobre el token de acceso. Estos datos permiten a la aplicación realizar un almacenamiento inteligente en caché de los tokens de acceso sin tener que analizar el mismo token de acceso. El AuthenticationResult devuelto por MSAL expone:

  • El token de acceso para la API web.
  • El token de identificador del usuario (JWT).
  • La expiración del token, que le indica la fecha y hora cuando expira el token.
  • El identificador de inquilino indica el inquilino en el que se encontró el usuario.
  • Los ámbitos para los que el token se emitió.
  • El identificador único del usuario.

Introducción a Microsoft Graph

La API Microsoft Graph ofrece un único punto de conexión, https://graph.microsoft.com, para proporcionar acceso a conclusiones y datos enriquecidos centrados en las personas en la nube de Microsoft. Puede usar API REST o SDK para acceder al punto de conexión y crear aplicaciones que admitan escenarios de Microsoft 365, que abarcan la productividad, la colaboración, la educación, la inteligencia de individuos y áreas de trabajo, etc. Microsoft Graph también incluye un eficaz conjunto de servicios que administran la identidad de usuarios y dispositivos.

Por ejemplo, puede leer las propiedades de un usuario que ha iniciado sesión si accede al punto de conexión https://graph.microsoft.com/v1.0/me.