TeamsFx SDK
TeamsFx ayuda a reducir las tareas mediante el inicio de sesión único (SSO) de Microsoft Teams y el acceso a los recursos en la nube a instrucciones de línea única sin configuración. Puede usar el SDK de TeamsFx en el explorador y Node.js entornos. Se puede acceder a las funcionalidades principales de TeamsFx en entornos de cliente y servidor. Puede escribir código de autenticación de usuario para:
- Pestaña Teams
- Bot de Teams
- Función de Azure
Requisitos previos
Debe instalar las siguientes herramientas y configurar el entorno de desarrollo:
Instalar | Para usar... | |
---|---|---|
Visual Studio Code | Entornos de compilación de JavaScript, TypeScript o SharePoint Framework (SPFx). Use la versión 1.55 o posterior. | |
Kit de herramientas de Teams | Extensión de Microsoft Visual Studio Code que crea un scaffolding de proyecto para la aplicación. Use la versión 4.0.0. | |
Node.js | Entorno de tiempo de ejecución de JavaScript de back-end. Para obtener más información, vea Node.js tabla de compatibilidad de versiones para el tipo de proyecto. | |
Microsoft Teams | Microsoft Teams para colaborar con todos los usuarios con los que trabaja a través de aplicaciones para chat, reuniones, llamadas y todo en un solo lugar. | |
Microsoft Edge (recomendado) o Google Chrome | Un explorador con herramientas de desarrollo. |
Para obtener más información sobre Node.js compatibilidad de versiones, consulte Requisitos previos para crear la aplicación de Teams mediante Visual Studio Code.
Nota:
Si el proyecto ha instalado botbuilder
paquetes relacionados como dependencias, asegúrese de que son de la misma versión.
Debe tener conocimientos prácticos de:
Comenzar
El SDK de TeamsFx está preconfigurado en un proyecto con scaffolding mediante el kit de herramientas de TeamsFx o la CLI. Para obtener más información, consulte Proyecto de la aplicación de Teams.
Sugerencia
Los fragmentos de código se actualizan para la versión 2 del SDK de TeamsFx más reciente.
Instale el paquete @microsoft/teamsfx
.
Instale el SDK de TeamsFx para TypeScript o JavaScript con npm
:
npm install @microsoft/teamsfx
Funcionalidades básicas de TeamsFx
Clase TeamsFx
La instancia de la clase TeamsFx accede a todas las configuraciones de TeamsFx desde las variables de entorno de forma predeterminada. Puede establecer valores de configuración personalizados para invalidar los valores predeterminados. Para obtener más información, consulte invalidación de la configuración para obtener más información. Al crear una instancia de TeamsFx, debe especificar el tipo de identidad.
En la lista siguiente se proporcionan dos tipos diferentes de identidades:
Identidad de usuario: representa el usuario actual de Teams.
Identidad de la aplicación: representa la propia aplicación.
Nota:
Los constructores y métodos de TeamsFx no son los mismos para estos dos tipos de identidad.
Puede obtener más información sobre la identidad de usuario y la identidad de la aplicación en la sección siguiente:
Identidad de usuario
Comando | Descripción |
---|---|
new TeamsFx(IdentityType.User) |
La aplicación se autentica como usuario actual de Teams. |
TeamsFx:setSsoToken() |
Identidad del usuario en el entorno Node.js (sin explorador). |
TeamsFx:getUserInfo() |
Para obtener la información de base del usuario. |
TeamsFx:login() |
Se usa para permitir que el usuario realice el proceso de consentimiento, si desea usar SSO para obtener el token de acceso para determinados ámbitos de OAuth. |
Nota:
Puede acceder a los recursos en nombre del usuario actual de Teams.
Identidad de la aplicación
Comando | Descripción |
---|---|
new TeamsFx(IdentityType.App) |
La aplicación se autentica como una aplicación. El permiso normalmente necesita la aprobación del administrador. |
TeamsFx:getCredential() |
Proporciona instancias de credenciales que corresponden automáticamente al tipo de identidad. |
Nota:
Necesita el consentimiento del administrador para los recursos.
Credential
Las clases de credenciales implementan la TokenCredential
interfaz que se usa ampliamente en las API de biblioteca de Azure diseñadas para proporcionar tokens de acceso para ámbitos específicos. Para obtener más información sobre las clases relacionadas con credenciales y flujos de autenticación, consulte carpeta de credenciales.
Hay tres clases de credenciales para simplificar la autenticación. Estos son los escenarios correspondientes para cada destino de clase de credencial:
Identidad de usuario en el entorno del explorador
TeamsUserCredential
representa la identidad del usuario actual de Teams. Por primera vez se autentican las credenciales del usuario, el inicio de sesión único de Teams realiza el flujo en nombre de para el intercambio de tokens. El SDK usa esta credencial al elegir la identidad de usuario en el entorno del explorador.
El código siguiente es un ejemplo para crear 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);
Las configuraciones necesarias son initiateLoginEndpoint
y clientId
se encuentran dentro del tipo TeamsUserCredentialAuthConfig
.
Identidad de usuario en Node.js entorno
OnBehalfOfUserCredential
usa el flujo en nombre de y requiere el token de INICIO de sesión único de Teams, en escenarios de azure function o bot. El SDK de TeamsFx usa la siguiente credencial al elegir la identidad de usuario en Node.js entorno.
El código siguiente es un ejemplo para crear 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);
Las configuraciones necesarias son authorityHost
, tenantId
, clientId
, clientSecret
o certificateContent
que se encuentran dentro del tipo OnBehalfOfCredentialAuthConfig
.
Identidad de la aplicación en Node.js entorno
AppCredential
representa la identidad de la aplicación. Puede usar la identidad de la aplicación cuando el usuario no está implicado, por ejemplo, en un trabajo de automatización desencadenado por el tiempo. El SDK de TeamsFx usa la siguiente credencial al elegir la identidad de la aplicación en Node.js entorno.
El código siguiente es un ejemplo para crear 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);
Las configuraciones necesarias son authorityHost
, tenantId
, clientId
, clientSecret
o certificateContent
que están dentro del tipo AppCredentialAuthConfig
Inicio de sesión único de bot
Las clases relacionadas con bots se almacenan en la carpeta bot.
TeamsBotSsoPrompt
se integra con el marco de bots. Simplifica el proceso de autenticación al desarrollar una aplicación bot y desea usar el inicio de sesión único del bot.
El código siguiente es un ejemplo para crear 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);
Funciones compatibles
El SDK de TeamsFx proporciona varias funciones para facilitar la configuración de bibliotecas de terceros. Se encuentran en la carpeta principal.
Microsoft Graph Service:
createMicrosoftGraphClient
,createMicrosoftGraphClientWithCredential
yMsGraphAuthProvider
ayuda a crear una instancia de Graph autenticada.Nota:
createMicrosoftGraphClient
la función ha quedado en desuso. Se recomienda usarcreateMicrosoftGraphClientWithCredential
en su lugar para mejorar la experiencia de codificación.SQL:
getTediousConnectionConfig
devuelve una configuración de conexión tediosa.Configuración necesaria:
- Si desea usar la identidad de usuario, se
sqlServerEndpoint
requiere ,sqlUsername
ysqlPassword
. - Si desea usar la identidad MSI, se
sqlServerEndpoint
requiere ysqlIdentityId
.
Nota:
La
getTediousConnectionConfig
función ha quedado en desuso. Se recomienda que cree su propia configuración tediosa para una mayor flexibilidad.- Si desea usar la identidad de usuario, se
Invalidación de la configuración de la clase TeamsFx
Nota:
La clase TeamsFx ha quedado en desuso. Use TeamsUserCredential
, OnBehalfOfUserCredential
y AppCredential
en su lugar.
Puede pasar la configuración personalizada al crear una nueva TeamsFx
instancia para invalidar la configuración predeterminada o establecer los campos obligatorios cuando environment variables
faltan.
Para el proyecto de pestaña
Si ha creado un proyecto de pestaña con Microsoft Visual Studio Code Toolkit, se usan los siguientes valores de configuración a partir de variables de entorno preconfiguradas:
- 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) // solo se usa cuando hay una función back-end
- apiName (REACT_APP_FUNC_NAME) // solo se usa cuando hay una función back-end
Para el proyecto de bot o función de Azure
Si ha creado un proyecto de bot o función de Azure con Visual Studio Code Toolkit, se usan los siguientes valores de configuración a partir de variables de entorno preconfiguradas:
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) // solo se usa cuando hay una instancia de sql
sqlUsername (SQL_USER_NAME) // solo se usa cuando hay una instancia de sql
sqlPassword (SQL_PASSWORD) // solo se usa cuando hay una instancia de sql
sqlDatabaseName (SQL_DATABASE_NAME) // solo se usa cuando hay una instancia de SQL
sqlIdentityId (IDENTITY_ID) // solo se usa cuando hay una instancia de SQL
Control de errores
El tipo básico de respuesta de error de API es ErrorWithCode
, que contiene el código de error y el mensaje de error. Por ejemplo, para filtrar un error específico, puede usar el siguiente fragmento de código:
try {
const teamsfx = 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 clase TeamsFx ha quedado en desuso y ErrorWithCode
no se recomienda. Puede usar TeamsUserCredential
en su lugar.
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;
}
}
Si se usa una instancia de credencial en otra biblioteca, como Microsoft Graph, es posible que se detecte y transforme un error.
Escenarios de Microsoft Graph
En esta sección se proporcionan varios fragmentos de código para escenarios comunes relacionados con Microsoft Graph. En estos escenarios, el usuario puede llamar a las API con permisos diferentes en front-end o back-end.
Permiso delegado de usuario en front-end (usar
TeamsUserCredential
)Uso de Graph API en la aplicación de pestaña
Este fragmento de código muestra cómo usar
TeamsUserCredential
ycreateMicrosoftGraphClientWithCredential
obtener perfiles de usuario de Microsoft Graph en la aplicación de pestaña. También muestra cómo detectar y resolver un objetoGraphError
.Importe las clases necesarias.
import { createMicrosoftGraphClientWithCredential, TeamsUserCredential, } from "@microsoft/teamsfx";
Cree
TeamsUserCredential
una instancia.const authConfig: TeamsUserCredentialAuthConfig = { clientId: process.env.REACT_APP_CLIENT_ID!, initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL!, }; const teamsUserCredential = new TeamsUserCredential(authConfig);
Use
teamsUserCredential.login()
para obtener el consentimiento del usuario.// 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
Puede inicializar una instancia de TeamsFx y un cliente de grafos y obtener información de Microsoft Graph por parte de este cliente.
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. } }
Para obtener más información sobre el ejemplo para usar Graph API en la aplicación de pestaña, vea Ejemplo de aplicación graph conector.
Integración con Microsoft Graph Toolkit
La biblioteca del kit de herramientas de Microsoft Graph es una colección de diversos proveedores de autenticación y componentes de interfaz de usuario con tecnología de Microsoft Graph.
El
@microsoft/mgt-teamsfx-provider
paquete expone la clase que usaTeamsFx
laTeamsFxProvider
clase para iniciar sesión a los usuarios y adquirir tokens para usarlos con Microsoft Graph.Puede instalar los siguientes paquetes necesarios:
npm install @microsoft/mgt-element @microsoft/mgt-teamsfx-provider @microsoft/teamsfx
Inicialice el proveedor dentro 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 teamsfx = new TeamsFx(); const provider = new TeamsFxProvider(teamsfx, scope); Providers.globalProvider = provider;
Puede usar el método para obtener el
teamsfx.login(scopes)
token de acceso necesario.// 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);
Puede agregar cualquier componente en la página HTML o en el
render()
método con React para usar elTeamsFx
contexto para acceder a Microsoft Graph.<mgt-person query="me" view="threeLines"></mgt-person>
public render(): void { return ( <div> <Person personQuery="me" view={PersonViewType.threelines}></Person> </div> ); }
Para obtener más información sobre el ejemplo para inicializar el proveedor TeamsFx, consulte el ejemplo de exportador de contactos.
Permiso delegado de usuario en back-end (usar
OnBehalfOfUserCredential
)Uso de Graph API en la aplicación bot
Este fragmento de código muestra cómo usar
TeamsBotSsoPrompt
para establecer un cuadro de diálogo y, a continuación, iniciar sesión para obtener un token de acceso.Inicializar y agregar
TeamsBotSsoPrompt
al conjunto de diálogos.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);
Inicie el cuadro de diálogo e inicie sesión.
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(); } }, ]) );
Para obtener más información sobre el ejemplo para usar Graph API en la aplicación bot, consulte ejemplo bot-sso.
Uso de Graph API en la extensión de mensaje
El siguiente fragmento de código muestra cómo invalidar
handleTeamsMessagingExtensionQuery
que se extiende desdeTeamsActivityHandler
y el usohandleMessageExtensionQueryWithSSO
proporcionado por el SDK de TeamsFx para iniciar sesión y obtener un token de acceso: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 ... }); }
Para obtener más información sobre el ejemplo para usar graph API en la extensión de mensaje, consulte message-extension-sso-sample.
Uso de Graph API en el bot de comandos
Este fragmento de código muestra cómo implementar
TeamsFxBotSsoCommandHandler
para que el bot de comandos llame a La API de 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 use `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."; } } }
Para obtener más información sobre cómo implementar el controlador de comandos sso en el bot de comandos, consulte Incorporación del inicio de sesión único a la aplicación Teams. Además, hay un proyecto de ejemplo command-bot-with-sso que puede probar el bot de comandos de SSO.
Llamada a la función de Azure en la aplicación de pestaña: flujo en nombre de
Este fragmento de código muestra cómo usar
CreateApiClient
oaxios
biblioteca para llamar a Azure Function y cómo llamar a Graph API en Azure Function para obtener perfiles de usuario.Puede usar
CreateApiClient
el sdk de TeamsFx para llamar a Azure Function: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; }
También puede usar
axios
la biblioteca para llamar a Azure Function.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; }
Llame a Graph API en Azure Function en nombre del usuario en respuesta.
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; }
Para obtener más información sobre el ejemplo para usar Graph API en la aplicación bot, consulte ejemplo hello-world-tab-with-backend.
Permiso de aplicación en back-end
Uso de la autenticación basada en certificados en la función de Azure
Este fragmento de código muestra cómo usar el permiso de aplicación basado en certificados para obtener el token que se puede usar para llamar a Graph API.
Puede inicializar
appAuthConfig
proporcionando unPEM-encoded key certificate
objeto .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', };
Puede usar
AppCredential
para obtener el token.const appCredential = new AppCredential(appAuthConfig); const token = appCredential.getToken();
Uso de la autenticación de secreto de cliente en Azure Function
Este fragmento de código muestra cómo usar el permiso de aplicación secreta de cliente para obtener el token que se usa para llamar a Graph API.
Puede inicializar
authConfig
proporcionando unclient secret
objeto .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, };
Puede usar para
authConfig
obtener el token.const appCredential = new AppCredential(appAuthConfig); const token = appCredential.getToken();
Para obtener más información sobre el ejemplo para usar Graph API en la aplicación bot, consulte el ejemplo hello-world-tab-with-backend.
Otros escenarios
En esta sección se proporcionan varios fragmentos de código para otros escenarios relacionados con Microsoft Graph. Puede crear un cliente de API en Bot o Azure Function y acceder a SQL Database en Azure Function.
Creación de un cliente de API para llamar a la API existente en Bot o Azure Function
Este fragmento de código muestra cómo llamar a una API existente en bot mediante ApiKeyProvider
.
// Create an API Key auth provider. In addition to APiKeyProvider, 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 above auth provider.
// You can also implement 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");
Acceso a la base de datos SQL en la función de Azure
Use tedious
la biblioteca para acceder a SQL y usar DefaultTediousConnectionConfiguration
que administre la autenticación. También puede crear la configuración de conexión de otras bibliotecas SQL en función del resultado de sqlConnectionConfig.getConfig()
.
Establezca la configuración de conexión.
// Equivalent to: // const sqlConnectConfig = new DefaultTediousConnectionConfiguration({ // sqlServerEndpoint: process.env.SQL_ENDPOINT, // sqlUsername: process.env.SQL_USER_NAME, // sqlPassword: process.env.SQL_PASSWORD, // }); const teamsfx = 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");
Conéctese a la base de datos.
const connection = new Connection(config); connection.on("connect", (error) => { if (error) { console.log(error); } });
Nota:
La
getTediousConnectionConfig
función ha quedado en desuso, se recomienda que cree su propia configuración tediosa para mejorar la flexibilidad.
Para obtener más información sobre el ejemplo para acceder a SQL Database en La función de Azure, consulte ejemplo de share-now.
Personalización avanzada
Configuración del registro
Puede establecer el nivel de registro del cliente y redirigir las salidas al usar esta biblioteca.
Nota:
Los registros están desactivados de forma predeterminada, puede activarlos estableciendo el nivel de registro.
Habilitación del registro mediante la configuración del nivel de registro
Cuando se establece el nivel de registro, el registro se habilita. Imprime información de registro en la consola de forma predeterminada.
Establezca el nivel de registro mediante el siguiente fragmento de código:
// Only need the warning and error messages.
setLogLevel(LogLevel.Warn);
Nota:
Puede redirigir la salida del registro estableciendo una función de registro o registrador personalizada.
Redireccionamiento mediante la configuración del registrador personalizado
setLogLevel(LogLevel.Info);
// Set another logger if you want to redirect to Application Insights in Azure Function
setLogger(context.log);
Redireccionamiento mediante la configuración de la función de registro personalizada
setLogLevel(LogLevel.Info);
// Only log error message to Application Insights in bot application.
setLogFunction((level: LogLevel, message: string) => {
if (level === LogLevel.Error) {
this.telemetryClient.trackTrace({
message: message,
severityLevel: Severity.Error,
});
}
});
Nota:
Las funciones de registro no surten efecto si establece un registrador personalizado.
Actualización a la versión más reciente del SDK
Si usa la versión del SDK que tiene loadConfiguration()
, puede realizar los pasos siguientes para actualizar a la versión más reciente del SDK:
- En lugar de llamar a
loadConfiguration()
, use las clases de configuración de autenticación específicas para personalizar la configuración de cada tipo de credencial. Por ejemplo, useAppCredentialAuthConfig
paraAppCredential
,OnBehalfOfUserCredentialAuthConfig
paraOnBehalfOfUserCredential
yTeamsUserCredentialAuthConfig
paraTeamsUserCredential
. - Reemplazar
new TeamsUserCredential()
pornew TeamsUserCredential(authConfig)
. - Reemplazar
new M365TenantCredential()
pornew AppCredential(authConfig)
. - Reemplazar
new OnBehalfOfUserCredential(ssoToken)
pornew OnBehalfOfUserCredential(authConfig)
.