Outlook addin - l'utente deve per forza cliccare sulla dialog per ottenere un token graph?

Federico Caruso 20 Punti di reputazione
2024-06-27T14:44:59.7066667+00:00

Salve a tutti.

Sto sviluppando un outlook addin usando Yeoman e React.

Ho seguito una guida Microsoft su come ottenere un token graph usando Msal ed effettivamente sono in grado di ottenerlo e chiamare le api senza problemi.

Il problema è che il modo in cui ottengo il token è che l'utente deve sempre cliccare su un pulsante che apre una dialog dove l'utente deve confermare che ${app} vuole aprire una nuova finestra.
C'è un modo tramite cui l'utente non è forzato a compiere sempre questa azione?

Grazie mille

Office
Office
Una suite di software per la produttività Microsoft che supporta attività aziendali comuni, tra cui l'elaborazione di parole, la posta elettronica, le presentazioni e la gestione e l'analisi dei dati.
33 domande
Microsoft Q&A
Microsoft Q&A
Usare questo tag per condividere suggerimenti, richieste di funzionalità e bug con il team di domande e risposte Microsoft. Il team di domande e risposte Microsoft valuterà regolarmente i commenti e suggerimenti e fornirà aggiornamenti lungo il percorso.
54 domande
0 commenti Nessun commento
{count} voti

Risposta accettata
  1. Monica Caprio (Convergys International Europe) 1,130 Punti di reputazione Fornitore Microsoft
    2024-06-28T09:22:17.57+00:00

    Gentile Federico,

    Per evitare che l'utente debba cliccare sempre su un pulsante e confermare l'apertura di una nuova finestra, puoi implementare l'autenticazione silenziosa usando MSAL (Microsoft Authentication Library). L'autenticazione silenziosa tenta di acquisire un token senza richiedere l'intervento dell'utente, sfruttando un token di aggiornamento (refresh token) o un cookie di sessione esistente.

    Ecco come puoi farlo:

    Passaggi per Implementare l'Autenticazione Silenziosa

    1. Configurazione iniziale di MSAL: Assicurati che la tua configurazione di MSAL sia corretta. Ecco un esempio:
      
         import { PublicClientApplication } from "@azure/msal-browser";
      
         const msalConfig = {
      
           auth: {
      
             clientId: "your-client-id",
      
             authority: "https://login.microsoftonline.com/your-tenant-id",
      
             redirectUri: "your-redirect-uri",
      
           },
      
         };
      
         const msalInstance = new PublicClientApplication(msalConfig);
      
      
    2. Acquisizione di un token silenzioso: Usa il metodo acquireTokenSilent di MSAL per tentare di acquisire un token senza l'intervento dell'utente.
      
         import { InteractionRequiredAuthError } from "@azure/msal-browser";
      
         async function getTokenSilent() {
      
           const account = msalInstance.getAllAccounts()[0];
      
           const request = {
      
             scopes: ["User.Read"],
      
             account: account,
      
           };
      
           try {
      
             const response = await msalInstance.acquireTokenSilent(request);
      
             return response.accessToken;
      
           } catch (error) {
      
             if (error instanceof InteractionRequiredAuthError) {
      
               // Se l'autenticazione silenziosa fallisce, chiedi l'interazione dell'utente
      
               return getTokenInteractive();
      
             } else {
      
               console.error(error);
      
               throw error;
      
             }
      
           }
      
         }
      
      
    3. Autenticazione interattiva come fallback: Se l'autenticazione silenziosa fallisce (ad esempio, il token è scaduto o non è valido), usa l'autenticazione interattiva come fallback.
      
         async function getTokenInteractive() {
      
           const request = {
      
             scopes: ["User.Read"],
      
           };
      
           try {
      
             const response = await msalInstance.acquireTokenPopup(request);
      
             return response.accessToken;
      
           } catch (error) {
      
             console.error(error);
      
             throw error;
      
           }
      
         }
      
      
    4. Chiamare le API con il token: Ora puoi chiamare le API di Microsoft Graph usando il token ottenuto.
      
         async function callGraphApi() {
      
           try {
      
             const token = await getTokenSilent();
      
             const response = await fetch("https://graph.microsoft.com/v1.0/me", {
      
               headers: {
      
                 Authorization: `Bearer ${token}`,
      
               },
      
             });
      
             const data = await response.json();
      
             console.log(data);
      
           } catch (error) {
      
             console.error("Errore nella chiamata all'API di Graph", error);
      
           }
      
         }
      
      

    Considerazioni

    • Consenso degli Utenti: La prima volta che un utente usa la tua applicazione, dovrà comunque fornire il consenso interattivo. Una volta ottenuto il consenso, i futuri accessi possono essere gestiti silenziosamente finché il token di aggiornamento è valido.
    • Gestione degli Errori: Assicurati di gestire correttamente gli errori e le eccezioni, specialmente i casi in cui è richiesta l'interazione dell'utente.
    • Token di Aggiornamento: MSAL gestisce automaticamente i token di aggiornamento, quindi non dovrai gestirli manualmente.

    Seguendo questi passaggi, dovresti essere in grado di ridurre al minimo l'interazione dell'utente per l'autenticazione, migliorando l'esperienza utente della tua applicazione Outlook Add-in.

    Spero di essere stata di aiuto

    Monica.

    1 persona ha trovato utile questa risposta.

0 risposte aggiuntive

Ordina per: Più utili

Risposta

Le risposte possono essere contrassegnate come risposte accettate dall'autore della domanda. Ciò consente agli utenti di sapere che la risposta ha risolto il problema dell'autore.