Пакет SDK TeamsFx
TeamsFx помогает сократить число задач, используя единый вход Microsoft Teams и доступ к облачным ресурсам до инструкций в одной строке с нулевой конфигурацией. Пакет SDK TeamsFx можно использовать в браузере и Node.js средах. Доступ к основным функциям TeamsFx можно получить в клиентских и серверных средах. Код проверки подлинности пользователя можно написать для:
- Вкладка Teams
- Бот Teams
- Функция Azure
Предварительные условия
Необходимо установить следующие средства и настроить среду разработки:
Установка | Для использования... | |
---|---|---|
Visual Studio Code; | Сред сборки JavaScript, TypeScript или SharePoint Framework (SPFx). Используйте версию 1.55 или более позднюю. | |
Набор средств Teams | Расширение Microsoft Visual Studio Code, которое создает шаблон проекта для приложения. Используйте версию 4.0.0. | |
Node.js | Серверной среды выполнения JavaScript. Дополнительные сведения см . вNode.js таблице совместимости версий для типа проекта. | |
Microsoft Teams | Microsoft Teams для совместной работы со всеми, с кем вы работаете, с помощью приложений для чата, собраний, звонков и всех в одном месте. | |
Microsoft Edge (рекомендуется) или Google Chrome | Браузера со средствами разработчика. |
Дополнительные сведения о совместимости версий Node.js см. в разделе Предварительные требования для создания приложения Teams с помощью Visual Studio Code.
Примечание.
Если в проекте установлены botbuilder
связанные пакеты в качестве зависимостей, убедитесь, что они имеют одну и ту же версию.
Вы должны обладать рабочими знаниями о:
Начало работы
Пакет SDK TeamsFx предварительно настроен в проекте со сформированными шаблонами с помощью набора средств TeamsFx или CLI. Дополнительные сведения см. в проекте приложения Teams.
Совет
Фрагменты кода обновлены для последней версии пакета SDK Для TeamsFx версии 2.
Установка пакета @microsoft/teamsfx
Установите пакет SDK TeamsFx для TypeScript или JavaScript с помощью npm
.
npm install @microsoft/teamsfx
Основные функции TeamsFx
Класс TeamsFx
Экземпляр класса TeamsFx по умолчанию обращается ко всем параметрам TeamsFx из переменных среды. Вы можете задать настраиваемые значения конфигурации, чтобы переопределить значения по умолчанию. Дополнительные сведения см. в разделе Конфигурация переопределения . При создании экземпляра TeamsFx необходимо указать тип удостоверения.
В следующем списке представлены два разных типа удостоверений:
Удостоверение пользователя. Представляет текущего пользователя Teams.
Удостоверение приложения. Представляет само приложение.
Примечание.
Конструкторы и методы TeamsFx не совпадают для этих двух типов удостоверений.
Дополнительные сведения об удостоверении пользователя и удостоверении приложения см. в следующем разделе:
Удостоверение пользователя
Команда | Описание |
---|---|
new TeamsFx(IdentityType.User) |
Подлинность приложения определяется в качестве текущего пользователя Teams. |
TeamsFx:setSsoToken() |
Удостоверение пользователя в среде Node.js (без браузера). |
TeamsFx:getUserInfo() |
Для получения базовых сведений о пользователе. |
TeamsFx:login() |
Оно используется, чтобы позволить пользователю завершить процесс получения согласия, если вы хотите использовать единый вход для получения токена доступа для определенных областей действия OAuth. |
Примечание.
Доступ к ресурсам можно получить от имени текущего пользователя Teams.
Удостоверение приложения
Команда | Описание |
---|---|
new TeamsFx(IdentityType.App) |
Проверка подлинности приложения выполняется как приложение. Обычно разрешение требует утверждения администратора. |
TeamsFx:getCredential() |
Он предоставляет экземпляры учетных данных, автоматически соответствующие типу удостоверения. |
Примечание.
Для ресурсов требуется согласие администратора.
Credential
Классы учетных TokenCredential
данных реализуют интерфейс, который широко используется в API библиотеки Azure, предназначенных для предоставления маркеров доступа для определенных областей. Дополнительные сведения о классах, связанных с учетными данными и потоком проверки подлинности, см. в разделе Папка учетных данных.
Есть три класса учетных данных для упрощения проверки подлинности. Ниже приведены соответствующие сценарии для каждого целевого класса учетных данных:
Удостоверение пользователя в среде браузера
TeamsUserCredential
представляет удостоверение текущего пользователя Teams. В первый раз учетные данные пользователя проходят проверку подлинности, а затем единый вход Teams выполняет поток On-Behalf-Of для обмена маркерами. Пакет SDK использует эти учетные данные при выборе удостоверения пользователя в среде браузера.
Следующий код является примером для создания 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);
Обязательными конфигурациями являются initiateLoginEndpoint
и clientId
, которые находятся внутри типа TeamsUserCredentialAuthConfig
.
Удостоверение пользователя в Node.js среде
OnBehalfOfUserCredential
использует поток On-Behalf-Of и требует маркер единого входа Teams в сценариях функции Или бота Azure. Пакет SDK TeamsFx использует следующие учетные данные при выборе удостоверения пользователя в Node.js среде.
Следующий код является примером для создания 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);
Обязательные конфигурации: authorityHost
, tenantId
, clientId
, clientSecret
или certificateContent
, которые находятся внутри типа OnBehalfOfCredentialAuthConfig
.
Удостоверение приложения в среде Node.js
AppCredential
представляет удостоверение приложения. Удостоверение приложения можно использовать, если пользователь не участвует, например, в задании автоматизации с активацией времени. Пакет SDK TeamsFx использует следующие учетные данные при выборе удостоверения приложения в Node.js среде.
Следующий код является примером для создания 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);
Обязательные конфигурации: , , , или certificateContent
, которые находятся authorityHost
внутри clientSecret
типа. clientId
tenantId
AppCredentialAuthConfig
SSO бота
Классы, связанные с ботом, хранятся в папке bot folder.
TeamsBotSsoPrompt
интегрируется с платформой бота. Это упрощает процесс проверки подлинности при разработке приложения бота и использовании единого входа бота.
Следующий код является примером для создания 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);
Поддерживаемые функции
Пакет SDK TeamsFx предоставляет несколько функций для упрощения настройки сторонних библиотек. Они находятся в основной папке.
Служба Microsoft Graph:
createMicrosoftGraphClient
,createMicrosoftGraphClientWithCredential
иMsGraphAuthProvider
помогает создать экземпляр Graph с проверкой подлинности.Примечание.
createMicrosoftGraphClient
функция устарела. Вместо этого рекомендуется использоватьcreateMicrosoftGraphClientWithCredential
для более эффективного программирования.SQL:
getTediousConnectionConfig
возвращает оголительную конфигурацию подключения.Требуемая конфигурация
- Если вы хотите использовать удостоверение пользователя, требуются
sqlServerEndpoint
,sqlUsername
иsqlPassword
. - Если вы хотите использовать удостоверение MSI, то
sqlServerEndpoint
иsqlIdentityId
являются обязательными.
Примечание.
Функция
getTediousConnectionConfig
устарела. Рекомендуется создавать собственную конфигурацию для повышения гибкости.- Если вы хотите использовать удостоверение пользователя, требуются
Конфигурация переопределения для класса TeamsFx
Примечание.
Класс TeamsFx устарел. Вместо этого используйте TeamsUserCredential
, OnBehalfOfUserCredential
и AppCredential
.
Вы можете передать настраиваемую конфигурацию при создании нового TeamsFx
экземпляра, чтобы переопределить конфигурацию по умолчанию или задать обязательные поля, если environment variables
они отсутствуют.
Для проекта вкладки
Если вы создали проект вкладки с помощью Microsoft Visual Studio Code Toolkit, из предварительно настроенных переменных среды используются следующие значения конфигурации:
- 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) // используется только при наличии серверной функции.
- apiName (REACT_APP_FUNC_NAME) // используется только при наличии серверной функции
Для проекта функции Или бота Azure
Если вы создали проект функции Или бота Azure с помощью Visual Studio Code Toolkit, из предварительно настроенных переменных среды используются следующие значения конфигурации:
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) // используется только при наличии экземпляра SQL
sqlUsername (SQL_USER_NAME) // используется только при наличии экземпляра SQL
sqlPassword (SQL_PASSWORD) // используется только при наличии экземпляра SQL.
sqlDatabaseName (SQL_DATABASE_NAME) // используется только при наличии экземпляра SQL.
sqlIdentityId (IDENTITY_ID) // используется только при наличии экземпляра SQL
Обработка ошибок
Базовый тип ответа на ошибку API — ErrorWithCode
, который содержит код ошибки и сообщение об ошибке. Например, чтобы отфильтровать определенную ошибку, можно использовать следующий фрагмент кода:
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;
}
}
Примечание.
Класс TeamsFx не рекомендуется использовать и ErrorWithCode
не рекомендуется. Вместо этого можно использовать TeamsUserCredential
.
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;
}
}
Если экземпляр учетных данных используется в другой библиотеке, например Microsoft Graph, возможно, ошибка перехватывается и преобразуется.
Сценарии Microsoft Graph
В этом разделе представлено несколько фрагментов кода для распространенных сценариев, связанных с Microsoft Graph. В таких сценариях пользователь может вызывать API с разными разрешениями во интерфейсе или серверной части.
Пользователь делегировать разрешение во интерфейсном интерфейсе (используйте
TeamsUserCredential
)Использование API graph в приложении tab
В этом фрагменте кода показано, как использовать
TeamsUserCredential
иcreateMicrosoftGraphClientWithCredential
получать профили пользователей из Microsoft Graph в приложении вкладки. В нем также показано, как перехватывать и разрешать .GraphError
Импорт необходимых классов.
import { createMicrosoftGraphClientWithCredential, TeamsUserCredential, } from "@microsoft/teamsfx";
Создание экземпляра
TeamsUserCredential
.const authConfig: TeamsUserCredentialAuthConfig = { clientId: process.env.REACT_APP_CLIENT_ID!, initiateLoginEndpoint: process.env.REACT_APP_START_LOGIN_PAGE_URL!, }; const teamsUserCredential = new TeamsUserCredential(authConfig);
Используйте
teamsUserCredential.login()
для получения согласия пользователя.// 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
Вы можете инициализировать экземпляр TeamsFx и клиент graph и получать сведения из Microsoft Graph этим клиентом.
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. } }
Дополнительные сведения об использовании API Graph в приложении tab см. в разделе Пример приложения Graph Conector.
Интеграция с Microsoft Graph Toolkit
Библиотека Microsoft Graph Toolkit — это коллекция различных поставщиков проверки подлинности и компонентов пользовательского интерфейса на платформе Microsoft Graph.
Пакет
@microsoft/mgt-teamsfx-provider
предоставляетTeamsFxProvider
класс, который используетTeamsFx
класс для входа пользователей и получения маркеров для использования с Microsoft Graph.Вы можете установить следующие необходимые пакеты:
npm install @microsoft/mgt-element @microsoft/mgt-teamsfx-provider @microsoft/teamsfx
Инициализация поставщика внутри компонента.
// 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;
Метод можно использовать для получения необходимого
teamsfx.login(scopes)
маркера доступа.// 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);
Вы можете добавить любой компонент на HTML-странице или в
render()
метод с помощью React, чтобы использоватьTeamsFx
контекст для доступа к Microsoft Graph.<mgt-person query="me" view="threeLines"></mgt-person>
public render(): void { return ( <div> <Person personQuery="me" view={PersonViewType.threelines}></Person> </div> ); }
Дополнительные сведения об инициализации поставщика TeamsFx см. в примере экспорта контактов.
Делегирование пользователем разрешений во внутренней части (используйте
OnBehalfOfUserCredential
)Использование API Graph в приложении бота
В этом фрагменте кода показано, как настроить
TeamsBotSsoPrompt
диалоговое окно, а затем выполнить вход для получения маркера доступа.Инициализация и добавление
TeamsBotSsoPrompt
в набор диалоговых окон.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);
Запустите диалоговое окно и выполните вход.
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(); } }, ]) );
Дополнительные сведения об использовании API graph в приложении бота см. в разделе пример bot-sso.
Использование API Graph в расширении сообщений
В следующем фрагменте кода показано, как переопределить
handleTeamsMessagingExtensionQuery
, который расширяется отTeamsActivityHandler
, и использоватьhandleMessageExtensionQueryWithSSO
предоставленный TeamsFx пакет SDK для входа для получения маркера доступа: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 ... }); }
Дополнительные сведения об использовании API graph в расширении сообщений см. в разделе message-extension-sso-sample.
Использование API Graph в командном боте
В этом фрагменте кода показано, как реализовать для
TeamsFxBotSsoCommandHandler
командного бота вызов Microsoft API.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."; } } }
Дополнительные сведения о реализации обработчика команд единого входа в боте команд см. в статье Добавление единого входа в приложение Teams. Существует пример проекта command-bot-with-sso , в который можно попробовать бот единого входа.
Вызов функции Azure в приложении вкладки: поток On-Behalf-Of
В этом фрагменте кода показано, как использовать
CreateApiClient
илиaxios
библиотеку для вызова функции Azure, а также как вызывать API Graph в Функции Azure для получения профилей пользователей.Для вызова функции Azure можно использовать
CreateApiClient
пакет sdk TeamsFx: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; }
Вы также можете использовать
axios
библиотеку для вызова функции 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; }
Вызов API Graph в функции Azure от имени пользователя в ответ.
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; }
Дополнительные сведения об использовании API graph в приложении бота см. в разделе пример hello-world-tab-with-backend.
Разрешение приложения в серверной части
Использование проверки подлинности на основе сертификатов в Функции Azure
В этом фрагменте кода показано, как использовать разрешение приложения на основе сертификата для получения маркера, который можно использовать для вызова API Graph.
Можно инициализировать ,
appAuthConfig
указав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', };
Вы можете использовать
AppCredential
для получения маркера.const appCredential = new AppCredential(appAuthConfig); const token = appCredential.getToken();
Использование проверки подлинности секрета клиента в функции Azure
В этом фрагменте кода показано, как использовать разрешение секретного приложения клиента для получения маркера, используемого для вызова API Graph.
Можно инициализировать ,
authConfig
указав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, };
Для получения маркера
authConfig
можно использовать .const appCredential = new AppCredential(appAuthConfig); const token = appCredential.getToken();
Дополнительные сведения об использовании API graph в приложении бота см. в примере hello-world-tab-with-backend.
Прочие сценарии
В этом разделе представлено несколько фрагментов кода для других сценариев, связанных с Microsoft Graph. Вы можете создать клиент API в Bot или Функции Azure и получить доступ к базе данных SQL в Функции Azure.
Создание клиента API для вызова существующего API в Bot или Функции Azure
В этом фрагменте кода показано, как вызвать существующий API в боте с помощью 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");
Доступ к базе данных SQL в функции Azure
Используйте tedious
библиотеку для доступа к SQL и используйте DefaultTediousConnectionConfiguration
, которая управляет проверкой подлинности. Вы также можете составить конфигурацию подключения других библиотек SQL на основе результата sqlConnectionConfig.getConfig()
.
Настройте конфигурацию подключения.
// 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");
Подключитесь к базе данных.
const connection = new Connection(config); connection.on("connect", (error) => { if (error) { console.log(error); } });
Примечание.
Функция
getTediousConnectionConfig
устарела. Рекомендуется составить собственную емкость конфигурации для повышения гибкости.
Дополнительные сведения о выборке для доступа к базе данных SQL в функции Azure см. в разделе Пример совместного использования.
Дополнительная настройка
Настройка журнала
При использовании этой библиотеки можно настроить уровень журнала клиента и перенаправить выходные данные.
Примечание.
Журналы отключены по умолчанию. Их можно включить, задав уровень журнала.
Включите журнал, установив уровень ведения журнала
При настройке уровня журнала включено ведение журнала. По умолчанию в консоли выводится информация журнала.
Установите уровень журнала, используя следующий фрагмент кода:
// Only need the warning and error messages.
setLogLevel(LogLevel.Warn);
Примечание.
Вы можете перенаправить выходные данные журнала, настроив пользовательский регистратор или функцию журнала.
Перенаправление путем настройки пользовательской записи журнала
setLogLevel(LogLevel.Info);
// Set another logger if you want to redirect to Application Insights in Azure Function
setLogger(context.log);
Перенаправление путем настройки пользовательской функции журнала
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,
});
}
});
Примечание.
Функции журнала не вступают в силу, если вы настроили пользовательское средство ведения журнала.
Обновление до последней версии пакета SDK
Если вы используете версию пакета SDK loadConfiguration()
с , вы можете выполнить следующие действия для обновления до последней версии пакета SDK:
- Вместо вызова
loadConfiguration()
используйте определенные классы конфигурации проверки подлинности для настройки параметров для каждого типа учетных данных. Например, используйтеAppCredentialAuthConfig
дляAppCredential
,OnBehalfOfUserCredentialAuthConfig
дляOnBehalfOfUserCredential
иTeamsUserCredentialAuthConfig
дляTeamsUserCredential
. - Замените
new TeamsUserCredential()
наnew TeamsUserCredential(authConfig)
. - Замените
new M365TenantCredential()
наnew AppCredential(authConfig)
. - Замените
new OnBehalfOfUserCredential(ssoToken)
наnew OnBehalfOfUserCredential(authConfig)
.
См. также
Platform Docs