Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Connectez-vous au Portail Azure avec les informations d’identification d’administrateur de votre location Microsoft 365. Par exemple : MyName@contoso.onmicrosoft.com.
Sélectionner les inscriptions d’applications. Si vous ne voyez pas l’icône, recherchez « Inscription de l’application » dans la barre de recherche.
La page Inscriptions d'applications s’affiche.
Sélectionnez Nouvelle inscription.
La page Inscrire une application s’affiche.
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.
- Définissez le Nom sur
Sélectionner Inscription. Un message s’affiche indiquant que l’inscription de l’application a été créée.
Copiez et enregistrez la valeur de l’ID d’application (client). Vous l’utiliserez dans une procédure ultérieure.
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.
- Dans le volet gauche, sélectionnez Gérer l’authentification>.
- Dans la section Configurations de plateforme, vous trouverez une liste d’URI de redirection d’application monopage.
- Sélectionnez Ajouter un URI.
- Entrez
https://localhost:3000/taskpane.htmlet sélectionnez Enregistrer. Cet URI de redirection suppose que vous utilisez NAA à partir dutaskpane.htmlfichier.
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 ).
Ajoutez le
@azure/msal-browserpackage à ladependenciessection dupackage.jsonfichier 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-browserAjoutez le code suivant en haut du
taskpane.jsfichier outaskpane.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
initMsalfonction initialise MSAL en appelantcreateNestablePublicClientApplication. Cela crée une application cliente publique imbriquée qui prend en charge l’authentification unique avec Outlok. - La
initMsalfonction 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.
- 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.
- Appel
acquireTokenSilent. Cela permet d’obtenir le jeton sans nécessiter l’interaction de l’utilisateur. - En
acquireTokenSilentcas d’échec, appelezacquireTokenPopuppour afficher une boîte de dialogue interactive pour l’utilisateur.acquireTokenSilentpeut é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.
Remplacez la
runfonction danstaskpane.jsoutaskpane.tspar 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,profileouemail. 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.Remplacez
TODO 1par le code suivant. Ce code appelleacquireTokenSilentpour 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. }Remplacez
TODO 1apar le code suivant. Ce code vérifie siacquireTokenSilenta levé unInteractionRequiredAuthError. Si c’est le cas, le code appelleacquireTokenPopupafin 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 2par 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.
- Authentifiez et autorisez avec l’API de boîte de dialogue Office.
- Exemple d’identité Microsoft pour SPA et JavaScript
- Exemples d’identités Microsoft pour différents types d’applications et infrastructures
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
- QUESTIONS FRÉQUENTES (FAQ) SUR NAA
- Authentification d’application imbriquée dans Microsoft Teams.
- Exemple Outlook : Comment revenir en arrière et prendre en charge Internet Explorer 11
- Authentifiez et autorisez avec l’API de boîte de dialogue Office.
- Exemple d’identité Microsoft pour SPA et JavaScript
- Exemples d’identités Microsoft pour différents types d’applications et infrastructures