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.
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.
Inicie sesión en el Azure Portal con las credenciales de administrador en el inquilino de Microsoft 365. Por ejemplo, MyName@contoso.onmicrosoft.com.
Seleccione Registros de aplicaciones. Si no ve el icono, busque "Registro de aplicaciones" en la barra de búsqueda.
Aparece la página Registros de aplicaciones.
Seleccione Nuevo registro.
Aparece la página Registrar una aplicación.
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.
- Establezca Nombre como
Seleccione Registrar. Se muestra un mensaje que indica que se creó el registro de la aplicación.
Copie y guarde el valor del identificador de aplicación (cliente). Lo usará en un procedimiento posterior.
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.
- En el panel izquierdo, seleccione Administrar > autenticación.
- En la sección Configuraciones de plataforma hay una lista de URI de redireccionamiento de aplicación de página única.
- Seleccione Agregar URI.
- Escriba
https://localhost:3000/taskpane.htmly seleccione Guardar. Este URI de redireccionamiento supone que usa NAA desde eltaskpane.htmlarchivo.
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 ).
Agregue el
@azure/msal-browserpaquete a ladependenciessección delpackage.jsonarchivo 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-browserAgregue el código siguiente a la parte superior del
taskpane.jsarchivo otaskpane.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
initMsalfunción inicializa MSAL llamando acreateNestablePublicClientApplication. Esto crea una aplicación cliente pública anidable que admite el inicio de sesión único con Outlok. - La
initMsalfunció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.
- 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.
- Llamar a
acquireTokenSilent. Esto obtendrá el token sin necesidad de interacción del usuario. - Si
acquireTokenSilentse produce un error, llameacquireTokenPopupa para mostrar un cuadro de diálogo interactivo para el usuario.acquireTokenSilentpuede 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.
Reemplace la
runfunción entaskpane.jsotaskpane.tspor 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,profileopenidoemail. 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.Reemplace
TODO 1por el código siguiente. Este código llamaacquireTokenSilenta 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. }Reemplace
TODO 1apor el código siguiente. Este código comprueba siacquireTokenSilentse ha producido unInteractionRequiredAuthErrorerror . Si es así, el código llama aacquireTokenPopuppara 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 2por 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.
- Autentíquese y autorice con la API de cuadro de diálogo de Office.
- Ejemplo de identidad de Microsoft para SPA y JavaScript
- Ejemplos de identidad de Microsoft para varios tipos de aplicaciones y marcos
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 |
Sí |
acquireTokenRedirect |
No (produce una excepción) |
acquireTokenSilent |
Sí |
addEventCallback |
Sí |
addPerformanceCallback |
No (produce una excepción) |
disableAccountStorageEvents |
No (produce una excepción) |
enableAccountStorageEvents |
No (produce una excepción) |
getAccountByHomeId |
Sí |
getAccountByLocalId |
Sí |
getAccountByUsername |
Sí |
getActiveAccount |
Sí |
getAllAccounts |
Sí |
getConfiguration |
Sí |
getLogger |
Sí |
getTokenCache |
No (produce una excepción) |
handleRedirectPromise |
No |
initialize |
Sí |
initializeWrapperLibrary |
Sí |
loginPopup |
Sí |
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 |
Sí |
removePerformanceCallback |
No (produce una excepción) |
setActiveAccount |
No |
setLogger |
Sí |
ssoSilent |
Sí |
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
- Preguntas más frecuentes sobre NAA
- Autenticación de aplicaciones anidadas en Microsoft Teams.
- Ejemplo de Outlook: Cómo revertir y admitir Internet Explorer 11
- Autentíquese y autorice con la API de cuadro de diálogo de Office.
- Ejemplo de identidad de Microsoft para SPA y JavaScript
- Ejemplos de identidad de Microsoft para varios tipos de aplicaciones y marcos