Partager via


Activer l’authentification unique dans un complément Office avec l’authentification d’application imbriquée

Utilisez la bibliothèque MSAL.js avec l’authentification d’application imbriquée (NAA) pour activer l’authentification unique (SSO) à partir de votre complément Office. Les procédures décrites dans cet article vous guident tout au long de la création d’une inscription d’application et de l’ajout de code à votre projet pour utiliser NAA.

Comptes et hôtes pris en charge par NAA

NAA prend en charge les comptes Microsoft et les identités Microsoft Entra ID (professionnel/scolaire). Il ne prend pas en charge les Azure Active Directory B2C pour les scénarios de gestion des identités entreprise-consommateur. Pour plus d’informations sur les exigences NAA, consultez Ensemble de conditions requises pour l’authentification d’application imbriquée.

Inscrire votre application monopage

Vous devez créer une inscription Microsoft Azure App pour votre complément sur le Portail Azure. L’inscription de l’application doit avoir au minimum :

  • Un nom
  • Type de compte pris en charge
  • Redirection spa pour NAA

Si votre complément nécessite une inscription d’application supplémentaire au-delà de NAA et de l’authentification unique, consultez Application monopage : inscription d’application.

Ajouter un répartiteur approuvé via la redirection SPA

Pour activer NAA, l’inscription de votre application doit inclure un URI de redirection spécifique pour indiquer au Plateforme d'identités Microsoft que votre complément se permet d’être réparti par des hôtes pris en charge. L’URI de redirection de l’application doit être de type Application monopage et être conforme au schéma suivant.

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

Votre domaine doit inclure uniquement l’origine et non ses sous-chemins. Par exemple :

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

Les groupes de répartiteur approuvés sont dynamiques par conception et peuvent être mis à jour à l’avenir pour inclure des hôtes supplémentaires où votre complément peut utiliser des flux NAA. Actuellement, le groupe brk-multihub comprend Word, Excel, PowerPoint, Outlook et Teams (lorsque Office est activé à l’intérieur).

Importante

Pour Word, Excel et PowerPoint sur le web, vous avez également besoin d’une redirection supplémentaire, car le navigateur utilise un flux d’authentification standard. L’URI de redirection spa doit référencer la page HTML dans laquelle vous allez utiliser la bibliothèque MSAL.js pour demander des jetons via NAA.

Procédez comme suit pour configurer une inscription d’application pour votre complément Office.

  1. Connectez-vous au Portail Azure avec les informations d’identification d’administrateur de votre location Microsoft 365. Par exemple : MyName@contoso.onmicrosoft.com.

  2. Sélectionner les inscriptions d’applications. Si vous ne voyez pas l’icône, recherchez « Inscription de l’application » dans la barre de recherche.

    Page d’accueil Portail Azure.

    La page Inscriptions d'applications s’affiche.

  3. Sélectionnez Nouvelle inscription.

    Nouvelle inscription dans le volet inscriptions d'applications.

    La page Inscrire une application s’affiche.

  4. Sur la page Inscrire une application, définissez les valeurs comme suit.

    • Définissez le Nom sur contoso-office-add-in-sso.
    • Définissez Types de comptes pris en chargesur Comptes dans n’importe quel annuaire organisationnel (n’importe quel annuaire Azure AD - multilocataire) et comptes Microsoft personnels (par exemple, Skype, Xbox).
    • Définissez URI de redirection pour utiliser l’application monopage (SPA) de plateforme et l’URI sur brk-multihub://localhost:3000. Cette redirection suppose que vous testez votre complément à partir d’un serveur localhost.

    Inscrire un volet d’application avec le nom et le compte pris en charge terminés.

  5. Sélectionner Inscription. Un message s’affiche indiquant que l’inscription de l’application a été créée.

    Message indiquant que l’inscription de l’application a été créée.

  6. Copiez et enregistrez la valeur de l’ID d’application (client). Vous l’utiliserez dans une procédure ultérieure.

    Volet Inscription d’application pour Contoso affichant l’ID client et l’ID d’annuaire.

Si votre complément prend en charge Word, Excel ou PowerPoint sur le web, vous devez ajouter un URI de redirection SPA pour votre page du volet Office. Procédez comme suit pour ajouter un URI de redirection SPA pour votre page du volet Office.

  1. Dans le volet gauche, sélectionnez Gérer l’authentification>. Page d’authentification dans l’inscription de l’application Azure.
  2. Dans la section Configurations de plateforme, vous trouverez une liste d’URI de redirection d’application monopage.
  3. Sélectionnez Ajouter un URI. Sélection de l’option Ajouter un URI dans la page d’inscription de l’application Azure.
  4. Entrez https://localhost:3000/taskpane.html et sélectionnez Enregistrer. Cet URI de redirection suppose que vous utilisez NAA à partir du taskpane.html fichier. Ajout de l’URI de redirection du volet des tâches dans la page d’inscription de l’application Azure.

Configurer la configuration MSAL pour utiliser NAA

Configurez votre complément pour utiliser NAA en appelant la createNestablePublicClientApplication fonction dans MSAL. MSAL retourne une application cliente publique qui peut être imbriquée dans un hôte d’application natif (par exemple, Outlook) pour acquérir des jetons pour votre application.

Les étapes suivantes montrent comment activer NAA dans le taskpane.js fichier ou taskpane.ts dans un projet créé avec yo office (projet du volet Office de complément Office ).

  1. Ajoutez le @azure/msal-browser package à la dependencies section du package.json fichier pour votre projet. Pour plus d’informations sur ce package, consultez Bibliothèque d’authentification Microsoft pour JavaScript (MSAL.js) pour les applications Browser-Based Single-Page. Pour installer la dernière version, exécutez la commande suivante.

    npm install @azure/msal-browser
    
  2. Ajoutez le code suivant en haut du taskpane.js fichier ou taskpane.ts . Cette opération importera la bibliothèque de navigateur MSAL.

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

Les étapes suivantes sont différentes pour Outlook et pour Word, Excel et PowerPoint. Sélectionnez l’onglet qui correspond au type de complément que vous créez.

Initialiser la bibliothèque MSAL

Ensuite, vous devez initialiser MSAL et obtenir une instance de l’application cliente publique.

Ajoutez le code suivant au taskpane.js fichier ou taskpane.ts . Remplacez l’espace Enter_the_Application_Id_Here réservé par l’ID d’application Azure que vous avez enregistré précédemment. À propos de la note de code suivante :

  • La initMsal fonction initialise MSAL en appelant createNestablePublicClientApplication. Cela crée une application cliente publique imbriquée qui prend en charge l’authentification unique avec Outlok.
  • La initMsal fonction définit l’autoritésur common, ce qui prend en charge les comptes professionnels et scolaires ou les comptes Microsoft personnels. Si vous souhaitez configurer un seul locataire ou d’autres types de comptes, consultez Options de configuration d’application pour obtenir des options d’autorité supplémentaires.
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);
  }
}

Acquérir votre premier jeton

Les jetons acquis par MSAL.js via NAA seront émis pour votre ID d’inscription d’application Azure. Dans cet exemple de code, vous obtenez un jeton pour microsoft API Graph. Si l’utilisateur dispose d’une session active avec Microsoft Entra ID le jeton est acquis en mode silencieux. Si ce n’est pas le cas, la bibliothèque invite l’utilisateur à se connecter de manière interactive. Le jeton est ensuite utilisé pour appeler le API Graph Microsoft.

Les étapes suivantes montrent le modèle à utiliser pour l’acquisition d’un jeton.

  1. Spécifiez vos étendues. NAA prend en charge le consentement incrémentiel et dynamique. Demandez donc toujours les étendues minimales nécessaires pour que votre code termine sa tâche.
  2. Appel acquireTokenSilent. Cela permet d’obtenir le jeton sans nécessiter l’interaction de l’utilisateur.
  3. En acquireTokenSilent cas d’échec, appelez acquireTokenPopup pour afficher une boîte de dialogue interactive pour l’utilisateur. acquireTokenSilent peut échouer si le jeton a expiré ou si l’utilisateur n’a pas encore consenti à toutes les étendues demandées.

Le code suivant montre comment implémenter ce modèle d’authentification dans votre propre projet.

  1. Remplacez la run fonction dans taskpane.js ou taskpane.ts par le code suivant. Le code spécifie les étendues minimales nécessaires pour lire les fichiers de l’utilisateur.

    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 demande de jeton doit inclure des étendues autres que , offline_accessopenid, profileou email. Vous pouvez utiliser n’importe quelle combinaison des étendues précédentes, mais vous devez inclure au moins une étendue supplémentaire. Si ce n’est pas le cas, la demande de jeton peut échouer.

  2. Remplacez TODO 1 par le code suivant. Ce code appelle acquireTokenSilent pour obtenir le jeton d’accès.

    try {
      const userAccount = await msalInstance.acquireTokenSilent(tokenRequest);
      console.log("Acquired token silently.");
      accessToken = userAccount.accessToken;
    } catch (silentError) {
      // TODO 1a: Handle acquireTokenSilent failure.
    
    }
    
  3. Remplacez TODO 1a par le code suivant. Ce code vérifie si acquireTokenSilent a levé un InteractionRequiredAuthError. Si c’est le cas, le code appelle acquireTokenPopup afin que MSAL puisse utiliser une boîte de dialogue contextuelle pour interagir avec l’utilisateur. L’interaction peut être nécessaire pour diverses raisons, telles que l’exécution de l’autorisation multifacteur.

    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;
    }
    

Appeler une API

Après avoir acquis le jeton, utilisez-le pour appeler une API. L’exemple suivant montre comment appeler le API Graph Microsoft en appelant fetch avec le jeton attaché dans l’en-tête Authorization.

  • Remplacez TODO 2 par le code suivant.

    // 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);
    }
    

Une fois que tout le code précédent est ajouté à la run fonction, assurez-vous qu’un bouton du volet Office appelle la run fonction. Vous pouvez ensuite charger une version test du complément et essayer le code.

Qu’est-ce que l’authentification d’application imbriquée ?

L’authentification d’application imbriquée permet l’authentification unique pour les applications imbriquées dans les applications Microsoft prises en charge. Par exemple, Excel sur Windows exécute votre complément dans une vue web. Dans ce scénario, votre complément est une application imbriquée s’exécutant dans Excel, qui est l’hôte. NAA prend également en charge les applications imbriquées dans Teams. Par exemple, si un onglet Teams héberge Excel et que votre complément est chargé, il est imbriqué dans Excel, qui est également imbriqué dans Teams. Là encore, NAA prend en charge ce scénario imbriqué et vous pouvez accéder à l’authentification unique pour obtenir l’identité de l’utilisateur et les jetons d’accès de l’utilisateur connecté.

Meilleures pratiques

Nous vous recommandons les meilleures pratiques suivantes lors de l’utilisation de MSAL.js avec NAA.

Utiliser l’authentification silencieuse dans la mesure du possible

MSAL.js fournit la méthode qui gère le acquireTokenSilent renouvellement des jetons en effectuant des demandes de jeton silencieuses sans demander à l’utilisateur. La méthode recherche d’abord un jeton mis en cache valide. Si elle n’en trouve pas, la bibliothèque effectue la demande en mode silencieux pour Microsoft Entra ID et, s’il existe une session utilisateur active, un nouveau jeton est retourné.

Dans certains cas, la acquireTokenSilent tentative d’obtention du jeton par la méthode échoue. Par exemple, il y a une session utilisateur expirée avec Microsoft Entra ID ou une modification de mot de passe par l’utilisateur, ce qui nécessite une interaction de l’utilisateur. En cas d’échec de acquireTokenSilent, vous devez appeler la méthode de jeton interactif acquireTokenPopup .

Disposer d’un secours quand NAA n’est pas pris en charge

Bien que nous nous efforçions de fournir un haut degré de compatibilité avec ces flux dans l’écosystème Microsoft, votre complément peut être chargé dans un hôte Office plus ancien qui ne prend pas en charge NAA. Dans ce cas, votre complément ne prend pas en charge l’authentification unique transparente et vous devrez peut-être revenir à une autre méthode d’authentification de l’utilisateur. Reportez-vous aux exemples de code de cet article pour obtenir des exemples qui montrent comment gérer un scénario de secours.

Utilisez le code suivant pour case activée si NAA est pris en charge lors du chargement de votre complément.

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

Pour plus d’informations, consultez les ressources suivantes.

API MSAL.js prises en charge par NAA

Le tableau suivant indique les API prises en charge lorsque NAA est activé dans la configuration MSAL.

Méthode Pris en charge par NAA
acquireTokenByCode Non (lève une exception)
acquireTokenPopup Oui
acquireTokenRedirect Non (lève une exception)
acquireTokenSilent Oui
addEventCallback Oui
addPerformanceCallback Non (lève une exception)
disableAccountStorageEvents Non (lève une exception)
enableAccountStorageEvents Non (lève une exception)
getAccountByHomeId Oui
getAccountByLocalId Oui
getAccountByUsername Oui
getActiveAccount Oui
getAllAccounts Oui
getConfiguration Oui
getLogger Oui
getTokenCache Non (lève une exception)
handleRedirectPromise Non
initialize Oui
initializeWrapperLibrary Oui
loginPopup Oui
loginRedirect Non (lève une exception)
logout Non (lève une exception)
logoutPopup Non (lève une exception)
logoutRedirect Non (lève une exception)
removeEventCallback Oui
removePerformanceCallback Non (lève une exception)
setActiveAccount Non
setLogger Oui
ssoSilent Oui

Rapports de sécurité

Si vous rencontrez un problème de sécurité avec nos bibliothèques ou services, signalez-le avec secure@microsoft.com autant de détails que vous pouvez fournir. Votre soumission peut être éligible à une prime par le biais du programme Microsoft Bounty . Ne publiez pas de problèmes de sécurité sur GitHub ou tout autre site public. Nous vous contacterons peu de temps après la réception de votre rapport de problème. Nous vous encourageons à recevoir de nouvelles notifications d’incident de sécurité en consultant les notifications de sécurité techniques de Microsoft pour vous abonner aux alertes d’avis de sécurité.

Exemples de code

Exemple de nom Description
Complément Office avec authentification unique utilisant l’authentification d’application imbriquée Montre comment utiliser NAA dans un complément Office pour accéder aux API Microsoft Graph de l’utilisateur connecté.
Complément Outlook avec authentification unique utilisant l’authentification d’application imbriquée Montre comment utiliser NAA dans un complément Outlook pour accéder aux API Microsoft Graph de l’utilisateur connecté.
Implémenter l’authentification unique dans les événements d’un complément Outlook à l’aide de l’authentification d’application imbriquée Montre comment utiliser NAA et l’authentification unique dans les événements de complément Outlook.
Envoyer des revendications d’identité aux ressources à l’aide de l’authentification d’application imbriquée (NAA) et de l’authentification unique Montre comment envoyer les revendications d’identité de l’utilisateur connecté (par exemple, un nom, un e-mail ou un ID unique) à une ressource telle qu’une base de données. Cet exemple remplace un modèle obsolète pour les jetons Exchange Online hérités.

Voir aussi