TeamsFx SDK

Importante

TeamsFx SDK non è più supportato da Microsoft per la creazione di estensioni di Microsoft 365 Copilot, agenti di Microsoft 365 o scenari di app Teams moderni. L'SDK è attualmente in modalità deprecata e riceverà il supporto solo della community su GitHub fino a settembre 2026.

Per tutti i nuovi sviluppi supportati da Microsoft (estensioni Copilot, agenti di intelligenza artificiale, app di Teams o estensibilità di Microsoft 365 in generale), usa:

I nuovi progetti non devono essere creati con TeamsFx. È necessario eseguire la migrazione delle soluzioni TeamsFx esistenti all'SDK per agenti Microsoft 365.

TeamsFx riduce le attività usando l'accesso Single Sign-on (SSO) di Microsoft Teams e l'accesso alle risorse cloud con istruzioni a riga singola e configurazione zero. È possibile usare TeamsFx SDK sia in ambienti browser che Node.js. Le funzionalità di base di TeamsFx sono accessibili in ambienti client e server. È possibile scrivere il codice di autenticazione utente per:

  • Scheda Teams
  • Bot di Teams
  • Funzione di Azure

Prerequisiti

Installa gli strumenti seguenti e configura l'ambiente di sviluppo:

  Installare Per l'utilizzo...
  Visual Studio Code Ambienti di compilazione JavaScript, TypeScript o SharePoint Framework (SPFx). Usare la versione 1.55 o successiva.
  Microsoft 365 Agents Toolkit (in precedenza noto come Teams Toolkit) Un'estensione di Microsoft Visual Studio Code che crea un'impalcatura di progetto per l'app. Usare la versione 4.0.0.
  Node.js Ambiente di runtime JavaScript back-end. Per altre informazioni, vedere Node.js tabella di compatibilità delle versioni per il tipo di progetto.
  Microsoft Teams Microsoft Teams per collaborare con tutti i tuoi collaboratori tramite app per chat, riunioni, chiamate e tutto in un unico posto.
  Microsoft Edge (scelta consigliata) o Google Chrome Un browser con strumenti di sviluppo.

Per altre informazioni sulla compatibilità delle versioni di Node.js, vedere Prerequisiti per la creazione dell'app Teams con Visual Studio Code.

Nota

Se il progetto ha installato botbuilderpacchetti correlati come dipendenze, assicurarsi che siano della stessa versione.

Devi avere una conoscenza pratica di:

Guida introduttiva

TeamsFx SDK è preconfigurato nel progetto con scaffolding usando l'interfaccia della riga di comando di Microsoft 365 Agents Toolkit (in precedenza nota come TeamsFx Toolkit o CLI). Per altre informazioni, vedere Progetto app Teams.

Suggerimento

I frammenti di codice sono stati aggiornati per l'ultima versione 2 dell'SDK di TeamsFx.

Installare il pacchetto

Installa @microsoft/m365agentstoolkit-cli da npm ed esegui atk -h per controllare tutti i comandi disponibili:

npm install -g @microsoft/m365agentstoolkit-cli
atk -h

Funzionalità di base di TeamsFx

Classe TeamsFx

Per impostazione predefinita, l'istanza della classe TeamsFx accede a tutte le impostazioni di TeamsFx dalle variabili di ambiente. È possibile impostare valori di configurazione personalizzati per sostituire i valori predefiniti. Per altre informazioni, vedere Sostituire la configurazione per i dettagli. Quando si crea un'istanza di TeamsFx, è necessario specificare il tipo di identità.

L'elenco seguente fornisce i due diversi tipi di identità:

  • Identità utente: rappresenta l'utente corrente di Teams.
  • Identità applicazione: rappresenta l'applicazione stessa.

Nota

I costruttori e i metodi di TeamsFx non sono gli stessi per questi due tipi di identità.

Per altre informazioni sull'identità dell'utente e sull'identità dell'applicazione, vedere la sezione seguente:

Identità utente
Comando Descrizione
new TeamsFx(IdentityType.User) L'applicazione viene autenticata come utente Teams corrente.
TeamsFx:setSsoToken() Identità utente in Node.js ambiente (senza browser).
TeamsFx:getUserInfo() Per ottenere le informazioni di base dell'utente.
TeamsFx:login() Viene usato per consentire all'utente di eseguire il processo di consenso, se si vuole usare SSO per ottenere il token di accesso per determinati ambiti OAuth.

Nota

È possibile accedere alle risorse per conto dell'utente corrente di Teams.

Identità dell'applicazione
Comando Descrizione
new TeamsFx(IdentityType.App) L'applicazione viene autenticata come applicazione. L'autorizzazione richiede in genere l'approvazione dell'amministratore.
TeamsFx:getCredential() Fornisce automaticamente le istanze delle credenziali corrispondenti al tipo di identità.

Nota

Per le risorse è necessario il consenso dell'amministratore.

Credenziale

Le classi di credenziali implementano l'interfaccia TokenCredential ampiamente usata nelle API della libreria di Azure progettate per fornire token di accesso per ambiti specifici. Per altre informazioni sulle classi correlate al flusso di credenziali e autenticazione, vedere Cartella delle credenziali.

Esistono tre classi di credenziali per semplificare l'autenticazione. Ecco gli scenari corrispondenti per ogni destinazione della classe di credenziali:

Identità utente nell'ambiente del browser

TeamsUserCredential Rappresenta l'identità dell'utente corrente di Teams. Per la prima volta che le credenziali dell'utente vengono autenticate, Teams SSO esegue il flusso per conto di On-Behalf-Of per lo scambio di token. SDK utilizza queste credenziali quando si sceglie l'identità dell'utente nell'ambiente del browser.

Il codice seguente è un esempio per creare TeamsUserCredential:

const authConfig: TeamsUserCredentialAuthConfig = {
  clientId: process.env.REACT_APP_CLIENT_ID,
  initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL,
};

const credential = new TeamsUserCredential(authConfig);

Le configurazioni richieste sono initiateLoginEndpoint e clientId questo si trova all'interno di digitare TeamsUserCredentialAuthConfig.

Identità utente in Node.js ambiente

OnBehalfOfUserCredentialusa il flusso per conto di e richiede il token SSO di Teams, in scenari di funzione di Azure o bot. TeamsFx SDK usa le credenziali seguenti quando si sceglie l'identità dell'utente in Node.js ambiente.

Il codice seguente è un esempio per creare OnBehalfOfUserCredential:

const oboAuthConfig: OnBehalfOfCredentialAuthConfig = {
  authorityHost: process.env.M365_AUTHORITY_HOST,
  clientId: process.env.M365_CLIENT_ID,
  tenantId: process.env.M365_TENANT_ID,
  clientSecret: process.env.M365_CLIENT_SECRET,
};

const oboCredential = new OnBehalfOfUserCredential(ssoToken, oboAuthConfig);

Le configurazioni richieste sono authorityHost, tenantId, clientId, clientSecret, o certificateContent che si trova all'interno di digitare OnBehalfOfCredentialAuthConfig.

Identità dell'app in Node.js ambiente

AppCredential Rappresenta l'identità dell'app. È possibile usare l'identità dell'app quando l'utente non è coinvolto, ad esempio, in un processo di automazione con attivazione temporata. TeamsFx SDK usa le credenziali seguenti quando si sceglie l'identità dellNode.js app nell'ambiente.

Il codice seguente è un esempio per creare AppCredential:

const appAuthConfig: AppCredentialAuthConfig = {
  authorityHost: process.env.M365_AUTHORITY_HOST,
  clientId: process.env.M365_CLIENT_ID,
  tenantId: process.env.M365_TENANT_ID,
  clientSecret: process.env.M365_CLIENT_SECRET,
};
const appCredential = new AppCredential(appAuthConfig);

Le configurazioni richieste sono authorityHost, tenantId, clientId, clientSecret, o certificateContent è di tipo interno AppCredentialAuthConfig

Bot SSO

Le classi correlate ai bot sono archiviate nella cartella bot.

TeamsBotSsoPrompt Si integra con Bot Framework. Semplifica il processo di autenticazione quando si sviluppa un'applicazione bot e si vuole usare il bot SSO.

Il codice seguente è un esempio per creare TeamsBotSsoPrompt:

const TeamsBotSsoPromptId = "TEAMS_BOT_SSO_PROMPT";

const settings: TeamsBotSsoPromptSettings = {
  scopes: ["User.Read"],
  timeout: 900000,
  endOnInvalidMessage: true,
};

const authConfig: OnBehalfOfCredentialAuthConfig = {
  authorityHost: process.env.M365_AUTHORITY_HOST,
  clientId: process.env.M365_CLIENT_ID,
  tenantId: process.env.M365_TENANT_ID,
  clientSecret: process.env.M365_CLIENT_SECRET,
};
const loginUrl = process.env.INITIATE_LOGIN_ENDPOINT;
const ssoPrompt = new TeamsBotSsoPrompt(authConfig, loginUrl, TeamsBotSsoPromptId, settings);

Funzioni supportate

TeamsFx SDK offre diverse funzioni per facilitare la configurazione delle librerie di terze parti. Si trovano nella cartella principale.

  • Microsoft Graph Service: createMicrosoftGraphClient, createMicrosoftGraphClientWithCredential, e MsGraphAuthProvider aiuto per creare istanze di Graph autenticate.

Nota

createMicrosoftGraphClient La funzione è stata deprecata. Per una migliore esperienza di codifica, è consigliabile usare createMicrosoftGraphClientWithCredential invece.

  • SQL: restituisce getTediousConnectionConfig una configurazione di connessione noiosa.

    Configurazione richiesta:

    • Se si desidera utilizzare l'identità dell'utente, , , sqlServerEndpointsqlUsernamee sqlPassword sono obbligatori.
    • Se si desidera utilizzare l'identità MSI, allora sqlServerEndpoint e sqlIdentityId sono obbligatori.

Nota

La getTediousConnectionConfig funzione è stata deprecata. È consigliabile comporre la propria configurazione Tedious per una maggiore flessibilità.

Configurazione di override per la classe TeamsFx

Nota

La classe TeamsFx è stata deprecata. Usare TeamsUserCredentialinvece , OnBehalfOfUserCredentiale AppCredential .

È possibile passare la configurazione personalizzata durante la creazione di una nuova TeamsFx istanza per ignorare la configurazione predefinita o impostare i campi obbligatori quando environment variables mancano.

Per il progetto della scheda

Se hai creato il progetto scheda utilizzando Microsoft Visual Studio Code Toolkit, i seguenti valori di configurazione vengono utilizzati dalle variabili di ambiente preconfigurate:

  • authorityHost (REACT_APP_AUTHORITY_HOST)
  • tenantId (REACT_APP_TENANT_ID)
  • clientId (REACT_APP_CLIENT_ID)
  • initiateLoginEndpoint (REACT_APP_START_LOGIN_PAGE_URL)
  • applicationIdUri (REACT_APP_START_LOGIN_PAGE_URL)
  • apiEndpoint (REACT_APP_FUNC_ENDPOINT) // usato solo quando c'è una funzione di backend
  • apiName (REACT_APP_FUNC_NAME) // usato solo quando c'è una funzione di backend
Per una funzione di Azure o un progetto bot

Se è stata creata una funzione di Azure o un progetto bot usando Visual Studio Code Toolkit, i seguenti valori di configurazione vengono usati dalle variabili di ambiente preconfigurate:

  • initiateLoginEndpoint (INITIATE_LOGIN_ENDPOINT)

  • authorityHost (M365_AUTHORITY_HOST)

  • tenantId (M365_TENANT_ID)

  • clientId (M365_CLIENT_ID)

  • clientSecret (M365_CLIENT_SECRET)

  • applicationIdUri (M365_APPLICATION_ID_URI)

  • apiEndpoint (API_ENDPOINT)

  • sqlServerEndpoint (SQL_ENDPOINT) // Usato solo quando è presente un'istanza SQL

  • sqlUsername (SQL_USER_NAME) // utilizzato solo quando c'è un'istanza SQL

  • sqlPassword (SQL_PASSWORD) // usato solo quando c'è un'istanza SQL

  • sqlDatabaseName (SQL_DATABASE_NAME) // utilizzato solo quando è presente un'istanza SQL

  • sqlIdentityId (IDENTITY_ID) // usato solo quando è presente un'istanza SQL

Gestione degli errori

Il tipo base di risposta all'errore dell'API è ErrorWithCode, che contiene il codice di errore e il messaggio di errore. Ad esempio, per escludere un errore specifico, è possibile usare il frammento seguente:

try {
  const atk = new TeamsFx();
  await teamsfx.login("User.Read");
} catch (err: unknown) {
  if (err instanceof ErrorWithCode && err.code !== ErrorCode.ConsentFailed) {
    throw err;
  } else {
    // Silently fail because user cancels the consent dialog
    return;
  }
}

Nota

La classe TeamsFx è stata deprecata e ErrorWithCode non è consigliata. Puoi usare TeamsUserCredential il tuo posto.

try {
  const authConfig: TeamsUserCredentialAuthConfig = {
    clientId: process.env.REACT_APP_CLIENT_ID,
    initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL,
  };

  const credential = new TeamsUserCredential(authConfig);  
  await credential.login("User.Read");
} catch (err: unknown) {
  if (err instanceof ErrorWithCode && err.code !== ErrorCode.ConsentFailed) {
    throw err;
  } else {
    // Silently fail because user cancels the consent dialog
    return;
  }
}

Se un'istanza delle credenziali viene usata in altre raccolte, ad esempio Microsoft Graph, è possibile che un errore venga rilevato e trasformato.

Scenari di Microsoft Graph

In questa sezione vengono forniti diversi frammenti di codice per gli scenari comuni correlati a Microsoft Graph. In questi scenari, l'utente può chiamare le API usando autorizzazioni diverse nel front-end o nel back-end.

  • Autorizzazione utente delegato nel front-end (Uso TeamsUserCredential)

    Usare l'API Graph nell'app a schede

    Questo frammento di codice mostra come usare TeamsUserCredential e createMicrosoftGraphClientWithCredential ottenere i profili utente da Microsoft Graph nell'app a schede. Viene inoltre descritto come individuare e risolvere un file .GraphError

    1. Importa le classi necessarie.

      import {
       createMicrosoftGraphClientWithCredential,
       TeamsUserCredential,
      } from "@microsoft/teamsfx";
      
    2. Creare TeamsUserCredential un'istanza.

      const authConfig: TeamsUserCredentialAuthConfig = {
      clientId: process.env.REACT_APP_CLIENT_ID!,
      initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL!,
      };
      
      const teamsUserCredential = new TeamsUserCredential(authConfig);
      
    3. Da usare teamsUserCredential.login() per ottenere il consenso dell'utente.

      // Put these code in a call-to-action callback function to avoid browser blocking automatically showing up pop-ups.
      await teamsUserCredential.login(["User.Read"]); // Login with scope
      
    4. È possibile inizializzare un'istanza di TeamsFx e un client graph e ottenere informazioni da Microsoft Graph tramite questo client.

      try {
       const graphClient = createMicrosoftGraphClientWithCredential(teamsUserCredential, ["User.Read"]); // Initializes MS Graph SDK using our MsGraphAuthProvider
       const profile = await graphClient.api("/me").get();
      } catch (err: unknown) {
       // ErrorWithCode is handled by Graph client
       if (err instanceof GraphError && err.code?.includes(ErrorCode.UiRequiredError)) {
         // Need to show login button to ask for user consent.
       }
      }
      

    Per altre informazioni sull'esempio per usare l'API Graph nell'app a schede, vedere Esempio di app Graph Conector.

    Integrazione con Microsoft Graph Toolkit

    La libreria Microsoft Graph Toolkit è una raccolta di vari provider di autenticazione e componenti dell'interfaccia utente basati su Microsoft Graph.

    Il @microsoft/mgt-teamsfx-provider pacchetto espone la classe che usa TeamsFx la TeamsFxProvider classe per accedere agli utenti e acquisire i token da usare con Microsoft Graph.

    1. Puoi installare i seguenti pacchetti richiesti:

         npm install @microsoft/mgt-element @microsoft/mgt-teamsfx-provider @microsoft/teamsfx
      
    2. Inizializza il provider all'interno del componente.

      // Import the providers and credential at the top of the page
      import {Providers} from '@microsoft/mgt-element';
      import {TeamsFxProvider} from '@microsoft/mgt-teamsfx-provider';
      import {TeamsUserCredential} from "@microsoft/teamsfx";
      
      const scope = ["User.Read"];
      const atk = new TeamsFx();
      const provider = new TeamsFxProvider(teamsfx, scope);
      Providers.globalProvider = provider;   
      
    3. È possibile usare il metodo per ottenere il teamsfx.login(scopes) token di accesso richiesto.

      // Put these code in a call-to-action callback function to avoid browser blocking automatically showing up pop-ups. 
      await teamsfx.login(this.scope);
      Providers.globalProvider.setState(ProviderState.SignedIn);
      
    4. È possibile aggiungere qualsiasi componente nella pagina HTML o nel metodo render() con React per utilizzare il TeamsFx contesto per accedere a Microsoft Graph.

      <mgt-person query="me" view="threeLines"></mgt-person>
      
      public render(): void {
      return (
       <div>
           <Person personQuery="me" view={PersonViewType.threelines}></Person>
       </div>
      );
      }    
      

    Per altre informazioni sull'esempio di inizializzazione del provider TeamsFx, vedere l'esempio di esportatore di contatti.

  • Autorizzazione utente delegato nel back-end (Uso OnBehalfOfUserCredential)

    Usare l'API Graph nell'applicazione bot

    Questo frammento di codice illustra come impostare TeamsBotSsoPrompt una finestra di dialogo e quindi accedere per ottenere un token di accesso.

    1. Inizializza e aggiungi TeamsBotSsoPrompt al set di finestre di dialogo.

      const { ConversationState, MemoryStorage } = require("botbuilder");
      const { DialogSet, WaterfallDialog } = require("botbuilder-dialogs");
      const { TeamsBotSsoPrompt, OnBehalfOfCredentialAuthConfig, TeamsBotSsoPromptSettings } = require("@microsoft/teamsfx");
      
      const convoState = new ConversationState(new MemoryStorage());
      const dialogState = convoState.createProperty("dialogState");
      const dialogs = new DialogSet(dialogState);
      
      const TeamsBotSsoPromptId = "TEAMS_BOT_SSO_PROMPT";
      
      const settings: TeamsBotSsoPromptSettings = {
      scopes: ["User.Read"],
      timeout: 900000,
      endOnInvalidMessage: true,
      };
      
      const authConfig: OnBehalfOfCredentialAuthConfig = {
       authorityHost: process.env.M365_AUTHORITY_HOST,
       clientId: process.env.M365_CLIENT_ID,
       tenantId: process.env.M365_TENANT_ID,
       clientSecret: process.env.M365_CLIENT_SECRET,
      };
      const loginUrl = process.env.INITIATE_LOGIN_ENDPOINT;
      const ssoPrompt = new TeamsBotSsoPrompt(authConfig, loginUrl, TeamsBotSsoPromptId, settings);
      
      dialogs.add(ssoPrompt);    
      
    2. Avvia la finestra di dialogo e accedi.

      dialogs.add(
        new WaterfallDialog("taskNeedingLogin", [
         async (step) => {
           return await step.beginDialog("TeamsBotSsoPrompt");
         },
         async (step) => {
          const token = step.result;
          if (token) {
            // ... continue with task needing access token ...
          } else {
           await step.context.sendActivity(`Sorry... We couldn't log you in. Try again later.`);
           return await step.endDialog();
          }
        },
       ])
      );    
      

    Per altre informazioni su come usare l'API Graph in un'applicazione bot, vedere l'esempio bot-sso.

    Usare l'API Graph nell'estensione del messaggio

    Il frammento di codice seguente illustra come eseguire l'override handleTeamsMessagingExtensionQuerydi , che si estende da TeamsActivityHandler. handleMessageExtensionQueryWithSSO Utilizza quelli forniti dall'SDK di TeamsFx per accedere e ottenere un token di accesso:

    
     const authConfig: OnBehalfOfCredentialAuthConfig = {
      authorityHost: process.env.M365_AUTHORITY_HOST,
      clientId: process.env.M365_CLIENT_ID,
      tenantId: process.env.M365_TENANT_ID,
      clientSecret: process.env.M365_CLIENT_SECRET,
     };
     const loginUrl = process.env.INITIATE_LOGIN_ENDPOINT;
     public async handleTeamsMessagingExtensionQuery(context: TurnContext, query: any): Promise<any> {
      return await handleMessageExtensionQueryWithSSO(context, authConfig, loginUrl, 'User.Read', 
        async (token: MessageExtensionTokenResponse) => {
          // ... continue to query with access token ...
        });
     }    
    

    Per altre informazioni su come usare l'API Graph in un'estensione messaggio, vedere message-extension-sso-sample.

    Usa l'API Graph nel bot di comando

    Questo frammento di codice mostra come implementare TeamsFxBotSsoCommandHandler un bot di comando per chiamare l'API Microsoft.

     import { Activity, TurnContext } from "botbuilder";
     import {
      CommandMessage,
      TriggerPatterns,
      createMicrosoftGraphClientWithCredential,
      TeamsFxBotSsoCommandHandler,
      TeamsBotSsoPromptTokenResponse,
     } from "@microsoft/teamsfx";
    
     const authConfig: OnBehalfOfCredentialAuthConfig = {
      authorityHost: process.env.M365_AUTHORITY_HOST,
      clientId: process.env.M365_CLIENT_ID,
      tenantId: process.env.M365_TENANT_ID,
      clientSecret: process.env.M365_CLIENT_SECRET,
     };
     const loginUrl = process.env.INITIATE_LOGIN_ENDPOINT;
    
     export class ProfileSsoCommandHandler implements TeamsFxBotSsoCommandHandler {
      triggerPatterns: TriggerPatterns = "profile";
    
      async handleCommandReceived(
        context: TurnContext,
        message: CommandMessage,
        tokenResponse: TeamsBotSsoPromptTokenResponse,
      ): Promise<string | Partial<Activity> | void> {
    
        const oboCredential = new OnBehalfOfUserCredential(tokenResponse.ssoToken, oboAuthConfig);
    
        // Add scope for your Azure AD app. For example: Mail.Read, etc.
        const graphClient = createMicrosoftGraphClientWithCredential(oboCredential, ["User.Read"]);
    
        // Call Graph API using `graph` instance to get user profile information
        const me = await graphClient.api("/me").get();
    
        if (me) {
          // Bot will send the user profile info to user
          return `Your command is '${message.text}' and you're logged in as ${me.displayName}`;
        } else {
          return "Could not retrieve profile information from Microsoft Graph.";
        }
      }
     }    
    
    

    Per altre informazioni sull'implementazione di un gestore di comandi SSO in un bot di comando, vedere Aggiungere l'accesso Single Sign-On all'app Teams. Esiste anche un progetto di esempio command-bot-with-sso che puoi provare per il bot di comando SSO.

    Chiama la funzione di Azure nell'app schede: flusso per conto di

    Questo frammento di codice illustra come usare CreateApiClient la axios libreria OR per chiamare una funzione di Azure e come chiamare l'API Graph in una funzione di Azure per ottenere profili utente.

    1. È possibile usare CreateApiClient fornito da TeamsFx SDK per chiamare una funzione di Azure:

      async function callFunction() {
        const authConfig: TeamsUserCredentialAuthConfig = {
       clientId: process.env.REACT_APP_CLIENT_ID,
       initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL,
        };
       const teamsUserCredential = new TeamsUserCredential(authConfig);
       // Create an API client by providing the token and endpoint.
       const apiClient = CreateApiClient(
         "https://YOUR_API_ENDPOINT", // Create an API Client that uses SSO token to authenticate requests
         new BearerTokenAuthProvider(async () =>  (await teamsUserCredential.getToken(""))!.token) // Call API hosted in Azure Functions on behalf of user to inject token to request header
       );
       // Send a GET request to "RELATIVE_API_PATH", "/api/functionName" for example.
        const response = await apiClient.get("RELATIVE_API_PATH");
        return response.data;
      }    
      

      È anche possibile usare la axios libreria per chiamare una funzione di Azure.

      async function callFunction() {
        const authConfig: TeamsUserCredentialAuthConfig = {
          clientId: process.env.REACT_APP_CLIENT_ID,
          initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL,
        };
        const teamsUserCredential = new TeamsUserCredential(authConfig);
        const accessToken = await teamsUserCredential.getToken(""); // Get SSO token 
        const endpoint = "https://YOUR_API_ENDPOINT";
        const response = await axios.default.get(endpoint + "/api/" + functionName, {
          headers: {
            authorization: "Bearer " + accessToken.token,
          },
        });
        return response.data;
      }    
      
      
    2. Chiamare l'API Graph in una funzione di Azure per conto dell'utente in risposta.

      
      export default async function run(
      context: Context,
      req: HttpRequest,
      teamsfxContext: TeamsfxContext
      ): Promise<Response> {
       const res: Response = { status: 200, body: {},};
      
       const authConfig: OnBehalfOfCredentialAuthConfig = {
         authorityHost: process.env.M365_AUTHORITY_HOST,
         clientId: process.env.M365_CLIENT_ID,
         tenantId: process.env.M365_TENANT_ID,
         clientSecret: process.env.M365_CLIENT_SECRET,
       };
       const oboCredential = new OnBehalfOfUserCredential(tokenResponse.ssoToken, oboAuthConfig);
      
       // Query user's information from the access token.
       try {
        const currentUser: UserInfo = await oboCredential.getUserInfo();
        if (currentUser && currentUser.displayName) {
          res.body.userInfoMessage = `User display name is ${currentUser.displayName}.`;
        } else {
          res.body.userInfoMessage = "No user information was found in access token.";
        }
       } catch (e) {
       }
       // Create a graph client to access user's Microsoft 365 data after user has consented.
       try {
        const graphClient: Client = createMicrosoftGraphClientWithCredential(oboCredential, [".default"]);
        const profile: any = await graphClient.api("/me").get();
        res.body.graphClientMessage = profile;
       } catch (e) {
       }
       return res;
       }
      
      

    Per ulteriori informazioni su come utilizzare l'API Graph in un'applicazione bot, vedere l'esempio hello-world-tab-with-backend.

  • Autorizzazione dell'applicazione nel back-end

    Usare l'autenticazione basata su certificati nella funzione di Azure

    Questo frammento di codice illustra come usare l'autorizzazione dell'applicazione basata su certificato per ottenere il token che può essere usato per chiamare l'API API Graph.

    1. È possibile inizializzare fornendo appAuthConfig un file .PEM-encoded key certificate

       const appAuthConfig: AppCredentialAuthConfig = {
         authorityHost: process.env.M365_AUTHORITY_HOST,
         clientId: process.env.M365_CLIENT_ID,
         tenantId: process.env.M365_TENANT_ID,
         certificateContent: 'PEM-encoded key certificate',
        };
      
      
    2. Puoi usarlo AppCredential per ottenere il token.

      const appCredential = new AppCredential(appAuthConfig);
      const token = appCredential.getToken();    
      
    Usare l'autenticazione del segreto client nella funzione di Azure

    Questo frammento di codice illustra come usare l'autorizzazione dell'applicazione client secret per ottenere il token usato per chiamare l'API API Graph.

    1. È possibile inizializzare fornendo authConfig un file .client secret

      const appAuthConfig: AppCredentialAuthConfig = {
       authorityHost: process.env.M365_AUTHORITY_HOST,
       clientId: process.env.M365_CLIENT_ID,
       tenantId: process.env.M365_TENANT_ID,
       clientSecret: process.env.M365_CLIENT_SECRET,
      };
      
    2. Puoi usare il authConfig per ottenere il token.

      const appCredential = new AppCredential(appAuthConfig);
      const token = appCredential.getToken();    
      

    Per ulteriori informazioni su come utilizzare l'API Graph in un'applicazione bot, vedere l'esempio hello-world-tab-with-backend.

Altri scenari

In questa sezione sono disponibili diversi frammenti di codice per altri scenari correlati a Microsoft Graph. È possibile creare un client API in un bot o una funzione di Azure e accedere a un database SQL in una funzione di Azure.

Creare un client API per chiamare un'API esistente in un bot o in una funzione di Azure

Questo frammento di codice mostra come chiamare un'API esistente in un bot utilizzando ApiKeyProvider.

// Create an API Key auth provider. In addition to ApiKeyProvider, the following auth providers are also available:
// BearerTokenAuthProvider, BasicAuthProvider, CertificateAuthProvider.
const authProvider = new ApiKeyProvider("YOUR_API_KEY_NAME",
  "YOUR_API_KEY_VALUE",
  ApiKeyLocation.Header
);

// Create an API client using the above auth provider.
// You can also implement the AuthProvider interface and use it here.
const apiClient = createApiClient(
  "YOUR_API_ENDPOINT",
  authProvider
);

// Send a GET request to "RELATIVE_API_PATH", "/api/apiname" for example.
const response = await apiClient.get("RELATIVE_API_PATH");  
Database SQL di Access in Azure Funzione

Usare la libreria per accedere a SQL e usare DefaultTediousConnectionConfiguration che gestisce l'autenticazionetedious. È inoltre possibile comporre una configurazione di connessione di altre librerie SQL in base al risultato di sqlConnectionConfig.getConfig().

  1. Impostare la configurazione della connessione.

    // Equivalent to:
    // const sqlConnectConfig = new DefaultTediousConnectionConfiguration({
    //    sqlServerEndpoint: process.env.SQL_ENDPOINT,
    //    sqlUsername: process.env.SQL_USER_NAME,
    //    sqlPassword: process.env.SQL_PASSWORD,
    // });
    const atk = new TeamsFx();
    // If there's only one SQL database
    const config = await getTediousConnectionConfig(teamsfx);
    // If there are multiple SQL databases
    const config2 = await getTediousConnectionConfig(teamsfx, "your database name");  
    
  2. Connettersi al database.

    const connection = new Connection(config);
    connection.on("connect", (error) => {
    if (error) {
     console.log(error);
     }
    });  
    

    Nota

    La getTediousConnectionConfig funzione è stata deprecata. È consigliabile comporre una configurazione noiosa per una maggiore flessibilità.

Per altre informazioni su come accedere a un database SQL in una funzione di Azure, vedere l'esempio Share-now.

Personalizzazione avanzata

Configura registro

È possibile impostare il livello di registro dei clienti e reindirizzare gli output quando si utilizza questa libreria.

Nota

I log sono disattivati per impostazione predefinita. Puoi attivarli impostando il livello di log.

Abilita il registro impostando il livello di registro

Quando si imposta il livello di log, la registrazione viene abilitata. Per impostazione predefinita, stampa le informazioni di log nella console.

Imposta il livello di log usando il frammento seguente:

// Only need the warning and error messages.
setLogLevel(LogLevel.Warn);

Nota

È possibile reindirizzare l'output del log impostando un logger personalizzato o una funzione di log.

Reindirizza impostando un logger personalizzato

setLogLevel(LogLevel.Info);
// Set another logger if you want to redirect to Application Insights in Azure Function
setLogger(context.log);

Reindirizza impostando una funzione di log personalizzata

setLogLevel(LogLevel.Info);
// Only log error messages to Application Insights in bot application.
setLogFunction((level: LogLevel, message: string) => {
  if (level === LogLevel.Error) {
    this.telemetryClient.trackTrace({
      message: message,
      severityLevel: Severity.Error,
    });
  }
});

Nota

Le funzioni del log non hanno effetto se si imposta un logger personalizzato.

Aggiornare alla versione più recente dell'SDK

Se usi la versione dell'SDK che ha loadConfiguration(), puoi eseguire i passaggi seguenti per eseguire l'aggiornamento all'ultima versione dell'SDK:

  1. Invece di chiamare loadConfiguration(), utilizzare le classi di configurazione di autenticazione specifiche per personalizzare le impostazioni per ogni tipo di credenziale. Ad esempio, utilizzate AppCredentialAuthConfig for AppCredential, OnBehalfOfUserCredentialAuthConfig for OnBehalfOfUserCredentiale TeamsUserCredentialAuthConfig for TeamsUserCredential.
  2. Sostituisci new TeamsUserCredential() con new TeamsUserCredential(authConfig).
  3. Sostituisci new M365TenantCredential() con new AppCredential(authConfig).
  4. Sostituisci new OnBehalfOfUserCredential(ssoToken) con new OnBehalfOfUserCredential(authConfig).

Vedere anche