Compartir a través de


Habilitación del inicio de sesión único en un complemento de Office con autenticación de aplicaciones anidadas

Use la biblioteca de MSAL.js con autenticación de aplicaciones anidadas (NAA) para habilitar el inicio de sesión único (SSO) desde el complemento de Office. Los procedimientos de este artículo le guían a través de la creación de un registro de aplicaciones y la adición de código al proyecto para usar NAA.

Cuentas y hosts compatibles con NAA

NAA admite las identidades tanto de cuentas microsoft como de Microsoft Entra ID (profesional o educativa). No admite Azure Active Directory B2C para escenarios de administración de identidades de negocio a consumidor. Para obtener más información sobre los requisitos de NAA, consulte Conjunto de requisitos de autenticación de aplicaciones anidadas.

Registro de la aplicación de página única

Tendrá que crear un registro de Microsoft App de Azure para el complemento en el Azure Portal. El registro de la aplicación debe tener como mínimo:

  • Un nombre
  • Un tipo de cuenta compatible
  • Una redirección de SPA para NAA

Si el complemento requiere un registro de aplicación adicional más allá de NAA y SSO, consulte Aplicación de página única: Registro de aplicaciones.

Incorporación de un agente de confianza a través del redireccionamiento de SPA

Para habilitar NAA, el registro de la aplicación debe incluir un URI de redireccionamiento específico para indicar al Plataforma de identidad de Microsoft que el complemento se permite que los hosts admitidos puedan realizar la intermediación. El URI de redireccionamiento de la aplicación debe ser de tipo Aplicación de página única y cumplir con el siguiente esquema.

brk-multihub://your-add-in-domain

El dominio solo debe incluir el origen y no sus subpaths. Por ejemplo:

✔️ brk-multihub://localhost:3000
✔️ brk-multihub://www.contoso.com
❌ brk-multihub://www.contoso.com/go

Los grupos de agentes de confianza son dinámicos por diseño y se pueden actualizar en el futuro para incluir hosts adicionales donde el complemento puede usar flujos NAA. Actualmente, el grupo brk-multihub incluye Word, Excel, PowerPoint, Outlook y Teams (para cuando Office está activado dentro).

Importante

Para Word, Excel y PowerPoint en la Web, también necesita una redirección adicional, ya que el explorador usa un flujo de autenticación estándar. El URI de redireccionamiento de SPA debe hacer referencia a la página HTML donde usará la biblioteca MSAL.js para solicitar tokens a través de NAA.

Siga estos pasos para configurar un registro de aplicaciones para el complemento de Office.

  1. Inicie sesión en el Azure Portal con las credenciales de administrador en el inquilino de Microsoft 365. Por ejemplo, MyName@contoso.onmicrosoft.com.

  2. Seleccione Registros de aplicaciones. Si no ve el icono, busque "Registro de aplicaciones" en la barra de búsqueda.

    Página principal Azure Portal.

    Aparece la página Registros de aplicaciones.

  3. Seleccione Nuevo registro.

    Nuevo registro en el panel Registros de aplicaciones.

    Aparece la página Registrar una aplicación.

  4. En la página Registrar una aplicación, establezca los valores siguientes.

    • Establezca Nombre como contoso-office-add-in-sso.
    • Establezca Tipos de cuenta admitidosen Cuentas en cualquier directorio organizativo (cualquier directorio de AD Azure multiinquilino) y cuentas personales de Microsoft (por ejemplo, Skype, Xbox).
    • Establezca el URI de redirección para usar la aplicación de página única (SPA) de la plataforma y el URI en brk-multihub://localhost:3000. Esta redirección supone que está probando el complemento desde un servidor localhost.

    Registre un panel de aplicación con el nombre y la cuenta admitida completadas.

  5. Seleccione Registrar. Se muestra un mensaje que indica que se creó el registro de la aplicación.

    Mensaje que indica que se creó el registro de la aplicación.

  6. Copie y guarde el valor del identificador de aplicación (cliente). Lo usará en un procedimiento posterior.

    Panel de registro de aplicaciones para Contoso que muestra el identificador de cliente y el identificador de directorio.

Si el complemento admite Word, Excel o PowerPoint en la Web, debe agregar un URI de redireccionamiento spa para la página del panel de tareas. Siga estos pasos para agregar un URI de redireccionamiento spa para la página del panel de tareas.

  1. En el panel izquierdo, seleccione Administrar > autenticación. Página de autenticación del registro de la aplicación Azure.
  2. En la sección Configuraciones de plataforma hay una lista de URI de redireccionamiento de aplicación de página única.
  3. Seleccione Agregar URI. Seleccione la opción agregar URI en la página de registro de la aplicación Azure.
  4. Escriba https://localhost:3000/taskpane.html y seleccione Guardar. Este URI de redireccionamiento supone que usa NAA desde el taskpane.html archivo. Agregar el URI de redireccionamiento del panel de tareas en la página de registro de Azure aplicación.

Configuración de la configuración de MSAL para usar NAA

Configure el complemento para que use NAA llamando a la createNestablePublicClientApplication función en MSAL. MSAL devuelve una aplicación cliente pública que se puede anidar en un host de aplicación nativo (por ejemplo, Outlook) para adquirir tokens para la aplicación.

En los pasos siguientes se muestra cómo habilitar NAA en el taskpane.js archivo o taskpane.ts en un proyecto creado con yo office (proyecto del panel de tareas del complemento de Office ).

  1. Agregue el @azure/msal-browser paquete a la dependencies sección del package.json archivo del proyecto. Para obtener más información sobre este paquete, consulte Biblioteca de autenticación de Microsoft para JavaScript (MSAL.js) para aplicaciones Browser-Based Single-Page. Para instalar la versión más reciente, ejecute el siguiente comando.

    npm install @azure/msal-browser
    
  2. Agregue el código siguiente a la parte superior del taskpane.js archivo o taskpane.ts . Esto importará la biblioteca del explorador MSAL.

    import { createNestablePublicClientApplication, InteractionRequiredAuthError } from "@azure/msal-browser";
    

Los pasos siguientes son diferentes para Outlook que para Word, Excel y PowerPoint. Seleccione la pestaña correspondiente al tipo de complemento que va a compilar.

Inicializar la biblioteca MSAL

A continuación, debe inicializar MSAL y obtener una instancia de la aplicación cliente pública.

Agregue el código siguiente al taskpane.js archivo o taskpane.ts . Reemplace el marcador de Enter_the_Application_Id_Here posición por el identificador de aplicación de Azure que guardó anteriormente. Acerca de la siguiente nota de código:

  • La initMsal función inicializa MSAL llamando a createNestablePublicClientApplication. Esto crea una aplicación cliente pública anidable que admite el inicio de sesión único con Outlok.
  • La initMsal función establece la autoridad en común, que admite cuentas profesionales y educativas o cuentas personales de Microsoft. Si desea configurar un único inquilino u otros tipos de cuenta, consulte Opciones de configuración de la aplicación para obtener opciones de autoridad adicionales.
let msalInstance = undefined;

/**
 * Initialize MSAL as a nestable public client application.
  */
async function initMsal() {
  if (!msalInstance) {
    const clientId = "Enter_the_Application_Id_Here";
    const msalConfig = {
      auth: {
        clientId: clientId,
        authority: "https://login.microsoftonline.com/common"
      },
      cache: {
        cacheLocation: "localStorage"
      }
    };
    msalInstance = await createNestablePublicClientApplication(msalConfig);
  }
}

Adquisición del primer token

Los tokens adquiridos por MSAL.js a través de NAA se emitirán para el identificador de registro de la aplicación Azure. En este ejemplo de código, adquirirá un token para microsoft Graph API. Si el usuario tiene una sesión activa con Microsoft Entra ID el token se adquiere de forma silenciosa. Si no es así, la biblioteca solicita al usuario que inicie sesión de forma interactiva. A continuación, el token se usa para llamar al Graph API de Microsoft.

En los pasos siguientes se muestra el patrón que se va a usar para adquirir un token.

  1. Especifique los ámbitos. NAA admite el consentimiento incremental y dinámico, por lo que siempre solicite los ámbitos mínimos necesarios para que el código complete su tarea.
  2. Llamar a acquireTokenSilent. Esto obtendrá el token sin necesidad de interacción del usuario.
  3. Si acquireTokenSilent se produce un error, llame acquireTokenPopup a para mostrar un cuadro de diálogo interactivo para el usuario. acquireTokenSilent puede producir un error si el token ha expirado o el usuario aún no ha dado su consentimiento a todos los ámbitos solicitados.

En el código siguiente se muestra cómo implementar este patrón de autenticación en su propio proyecto.

  1. Reemplace la run función en taskpane.js o taskpane.ts por el código siguiente. El código especifica los ámbitos mínimos necesarios para leer los archivos del usuario.

    export async function run() {
      await initMsal();
      // Specify minimum scopes needed for the access token.
      const tokenRequest = {
        scopes: ["Files.Read", "User.Read"],
      };
      let accessToken = null;
    
      // TODO 1: Use msalInstance to get an access token.
    
      // TODO 2: Call the Microsoft Graph API.
    }
    

    Importante

    La solicitud de token debe incluir ámbitos distintos de , offline_access, profileopenido email. Puede usar cualquier combinación de los ámbitos anteriores, pero debe incluir al menos un ámbito adicional. Si no es así, la solicitud de token puede producir un error.

  2. Reemplace TODO 1 por el código siguiente. Este código llama acquireTokenSilent a para obtener el token de acceso.

    try {
      const userAccount = await msalInstance.acquireTokenSilent(tokenRequest);
      console.log("Acquired token silently.");
      accessToken = userAccount.accessToken;
    } catch (silentError) {
      // TODO 1a: Handle acquireTokenSilent failure.
    
    }
    
  3. Reemplace TODO 1a por el código siguiente. Este código comprueba si acquireTokenSilent se ha producido un InteractionRequiredAuthErrorerror . Si es así, el código llama a acquireTokenPopup para que MSAL pueda usar un cuadro de diálogo emergente para interactuar con el usuario. La interacción puede ser necesaria por diversos motivos, como completar la autorización multifactor.

    if (silentError instanceof InteractionRequiredAuthError) {
      console.log(`Unable to acquire token silently: ${silentError}`);
      // Silent acquisition failed. Continue to interactive acquisition.
      try {
        const userAccount = await msalInstance.acquireTokenPopup(tokenRequest);
        console.log("Acquired token interactively.");
        accessToken = userAccount.accessToken;
      } catch (popupError) {
        // Acquire token interactive failure.
        console.error(`Unable to acquire token interactively: ${popupError}`);
        return;
      }
    } else {
      // Acquire token silent failure. Error can't be resolved through interaction.
      console.error(`Unable to acquire token silently: ${silentError}`);
      return;
    }
    

Llamada a una API

Después de adquirir el token, úselo para llamar a una API. En el ejemplo siguiente se muestra cómo llamar a Microsoft Graph API mediante una llamada con fetch el token adjunto en el encabezado Authorization.

  • Reemplace TODO 2 por el código siguiente.

    // Call the Microsoft Graph API with the access token.
    const response = await fetch(
      `https://graph.microsoft.com/v1.0/me/drive/root/children?$select=name&$top=10`,
      {
        headers: { Authorization: `Bearer ${accessToken}` },
      }
    );
    
    if (response.ok) {
      // Write file names to the console.
      const data = await response.json();
      const names = data.value.map((item) => item.name);
    
      // Be sure the taskpane.html has an element with Id = item-subject.
      const label = document.getElementById("item-subject");
    
      // Write file names to task pane and the console.
      const nameText = names.join(", ");
      if (label) label.textContent = nameText;
      console.log(nameText);
    } else {
      const errorText = await response.text();
      console.error("Microsoft Graph call failed - error text: " + errorText);
    }
    

Una vez agregado todo el código anterior a la run función, asegúrese de que un botón del panel de tareas llama a la run función. A continuación, puede transferir localmente el complemento y probar el código.

¿Qué es la autenticación de aplicaciones anidadas?

La autenticación de aplicaciones anidadas habilita el inicio de sesión único para las aplicaciones anidadas dentro de las aplicaciones admitidas de Microsoft. Por ejemplo, Excel en Windows ejecuta el complemento dentro de una vista web. En este escenario, el complemento es una aplicación anidada que se ejecuta dentro de Excel, que es el host. NAA también admite aplicaciones anidadas en Teams. Por ejemplo, si una pestaña de Teams hospeda Excel y se carga el complemento, se anida dentro de Excel, que también está anidado dentro de Teams. De nuevo, NAA admite este escenario anidado y puede acceder al inicio de sesión único para obtener la identidad de usuario y los tokens de acceso del usuario que ha iniciado sesión.

Procedimientos recomendados

Se recomiendan los siguientes procedimientos recomendados al usar MSAL.js con NAA.

Usar la autenticación silenciosa siempre que sea posible

MSAL.js proporciona el método que controla la acquireTokenSilent renovación de tokens mediante la realización de solicitudes de token silenciosas sin preguntar al usuario. El método busca primero un token almacenado en caché válido. Si no encuentra una, la biblioteca realiza la solicitud silenciosa a Microsoft Entra ID y, si hay una sesión de usuario activa, se devuelve un token nuevo.

En algunos casos, se produce un error en el acquireTokenSilent intento del método de obtener el token. Algunos ejemplos de esto son cuando hay una sesión de usuario expirada con Microsoft Entra ID o un cambio de contraseña por parte del usuario, lo que requiere la interacción del usuario. Cuando se produce un error en acquireTokenSilent, debe llamar al método de token interactivo acquireTokenPopup .

Tener una reserva cuando no se admite NAA

Aunque nos esforzamos por proporcionar un alto grado de compatibilidad con estos flujos en todo el ecosistema de Microsoft, es posible que el complemento se cargue en un host de Office anterior que no admita NAA. En estos casos, el complemento no admitirá el inicio de sesión único de conexión directa y es posible que tenga que recurrir a un método alternativo para autenticar al usuario. Consulte los ejemplos de código de este artículo para obtener ejemplos que muestren cómo controlar un escenario de reserva.

Use el código siguiente para comprobar si se admite NAA cuando se carga el complemento.

   Office.context.requirements.isSetSupported("NestedAppAuth", "1.1");

Para obtener más información, consulte los siguientes recursos.

API de MSAL.js compatibles con NAA

En la tabla siguiente se muestran las API que se admiten cuando NAA está habilitado en la configuración de MSAL.

Método Compatible con NAA
acquireTokenByCode No (produce una excepción)
acquireTokenPopup
acquireTokenRedirect No (produce una excepción)
acquireTokenSilent
addEventCallback
addPerformanceCallback No (produce una excepción)
disableAccountStorageEvents No (produce una excepción)
enableAccountStorageEvents No (produce una excepción)
getAccountByHomeId
getAccountByLocalId
getAccountByUsername
getActiveAccount
getAllAccounts
getConfiguration
getLogger
getTokenCache No (produce una excepción)
handleRedirectPromise No
initialize
initializeWrapperLibrary
loginPopup
loginRedirect No (produce una excepción)
logout No (produce una excepción)
logoutPopup No (produce una excepción)
logoutRedirect No (produce una excepción)
removeEventCallback
removePerformanceCallback No (produce una excepción)
setActiveAccount No
setLogger
ssoSilent

Informes de seguridad

Si encuentra un problema de seguridad con nuestras bibliotecas o servicios, notifique el problema con secure@microsoft.com la mayor cantidad de detalles que pueda proporcionar. Su envío puede ser apto para obtener una recompensa a través del programa de recompensas de Microsoft . No publique problemas de seguridad en GitHub ni en ningún otro sitio público. Nos pondremos en contacto con usted poco después de recibir el informe de problemas. Le recomendamos que obtenga nuevas notificaciones de incidentes de seguridad visitando las notificaciones de seguridad técnica de Microsoft para suscribirse a alertas de avisos de seguridad.

Ejemplos de código

Ejemplo de nombre Descripción
Complemento de Office con SSO mediante la autenticación de aplicaciones anidadas Muestra cómo usar NAA en un complemento de Office para acceder a las API de Microsoft Graph para el usuario que ha iniciado sesión.
Complemento de Outlook con SSO mediante la autenticación de aplicaciones anidadas Muestra cómo usar NAA en un complemento de Outlook para acceder a las API de Microsoft Graph para el usuario que ha iniciado sesión.
Implementación del inicio de sesión único en eventos en un complemento de Outlook mediante la autenticación anidada de aplicaciones Muestra cómo usar NAA y SSO en eventos de complemento de Outlook.
Envío de notificaciones de identidad a recursos mediante la autenticación de aplicaciones anidadas (NAA) y el inicio de sesión único Muestra cómo enviar las notificaciones de identidad del usuario que ha iniciado sesión (como el nombre, el correo electrónico o un identificador único) a un recurso como una base de datos. En este ejemplo se reemplaza un patrón obsoleto para tokens de Exchange Online heredados.

Vea también