Microsoft Teams предоставляет функцию единого входа (SSO) для приложения, чтобы получить маркер пользователя Teams для доступа к Microsoft Graph и другим API. Набор средств Microsoft Teams упрощает процесс, включив определенные Microsoft Entra рабочие процессы и интеграции в простые высокоуровневые API. В результате вы можете легко включить возможности единого входа в приложение Teams. Дополнительные сведения см. в статье Проверка подлинности пользователей в Microsoft Teams.
Конфигурации ключей
Чтобы включить единый вход, настройте приложение Teams следующим образом:
Microsoft Entra манифесте приложения: обязательно определите URI, включая URI, который определяет приложение проверки подлинности Microsoft Entra и URI перенаправления, возвращающий маркер.
Манифест приложения Teams. Подключите приложение единого входа к приложению Teams, включив правильную конфигурацию.
Конфигурация Teams Toolkit и инфра-файлы. Убедитесь, что существуют необходимые конфигурации, чтобы включить единый вход для приложения Teams.
Сведения о приложении единого входа в файлах конфигурации Teams Toolkit. Убедитесь, что приложение проверки подлинности регистрируется в серверной службе, а набор средств Teams инициирует его во время отладки или предварительного просмотра приложения Teams.
Скачайте шаблон манифеста приложения Microsoft Entra.
Добавьте в файл скачанный код шаблона манифеста ./aad.manifest.json приложения. Это позволяет настраивать различные аспекты регистрации приложения и обновлять манифест по мере необходимости. Дополнительные сведения см. в манифесте приложения.
Обновление манифеста приложения Teams
./appPackages/manifest.json Добавьте в файл следующий код:
webApplicationInfoпредоставляет Microsoft Entra идентификатор приложения и сведения о Microsoft Graph, чтобы помочь пользователям войти в приложение.
Примечание.
Можно использовать для {{ENV_NAME}} ссылки на переменные в env/.env.{TEAMSFX_ENV} файле.
Обновление файлов конфигурации набора средств Teams
Найдите файлы конфигурации набора средств Teams, например ./teamsapp.yml и ./teamsapp.local.yml. Обновите необходимые конфигурации, связанные с Microsoft Entra в этих файлах.
Добавьте действие provision в и ./teamsapp.yml./teamsapp.local.yml, чтобы создать новое приложение Microsoft Entra, используемое для единого aadApp/create входа:
Измените manifestPath значение на относительный путь к шаблону aad.manifest.jsonманифеста приложения Microsoft Entra , если вы изменили путь к файлу.
В локальной конфигурации разместите aad/updatefile/createOrUpdateEnvironmentFile после действия . Это необходимо, так как aad/update использует выходные данные из file/createOrUpdateEnvironmentFile.
Для проекта React обновите cli/runNpmCommand в разделе deploy.
Если вы создаете приложение вкладки с помощью платформы React в CLI, найдите cli/runNpmCommand действие с build app в teamsapp.yml файле и добавьте следующие переменные среды:
Если вы создаете приложение вкладки с React платформой, найдите file/createOrUpdateEnvironmentFile действие для развертывания в teamsapp.local.yml файле и добавьте следующие переменные среды:
Чтобы обновить исходный код, выполните следующие действия.
auth-start.html Переместите файлы и auth-end.html из auth/public папки в папку public/ . Эти HTML-файлы служат для обработки перенаправлений проверки подлинности.
Переместите sso папку в auth/ папку src/sso/.
InitTeamsFx: этот файл выполняет функцию, которая инициализирует пакет SDK TeamsFx. После инициализации пакета SDK открывается GetUserProfile компонент .
GetUserProfile: этот файл выполняет функцию для получения сведений о пользователе путем вызова microsoft API Graph.
Скачайте шаблон манифеста приложения Microsoft Entra.
Добавьте в файл скачанный код шаблона манифеста ./aad.manifest.json приложения. Это позволяет настраивать различные аспекты регистрации приложения и обновлять манифест по мере необходимости. Дополнительные сведения см. в манифесте приложения.
Обновление манифеста приложения Teams
./appPackages/manifest.json Добавьте в файл следующий код:
webApplicationInfoпредоставляет Microsoft Entra идентификатор приложения и сведения о Microsoft Graph, чтобы помочь пользователям войти в приложение.
Примечание.
Можно использовать для {{ENV_NAME}} ссылки на переменные в env/.env.{TEAMSFX_ENV} файле.
Зарегистрируйте одну или несколько команд в commandLists.
Содержит commandLists команды, которые бот может предложить пользователям. Если вы используете шаблон бота teamsFx , задайте следующие значения:
{
"title": "profile",
"description": "Show user profile using Single Sign On feature"
}
Поле validDomains содержит домены для веб-сайтов, которые приложение загружает в клиенте Teams. Обновите следующее значение:
"validDomains": [
"${{BOT_DOMAIN}}"
]
Обновление файлов конфигурации набора средств Teams
Найдите файлы конфигурации набора средств Teams, например ./teamsapp.yml и ./teamsapp.local.yml. Обновите необходимые конфигурации, связанные с Microsoft Entra в этих файлах.
Добавьте следующий код aadApp/createprovision в и ./teamsapp.yml./teamsapp.local.yml для создания приложений Microsoft Entra, используемых для единого входа:
Переместите файлы, расположенные в папке, auth/sso в src. Класс ProfileSsoCommandHandler служит обработчиком команд единого входа, предназначенным для получения сведений о пользователе с помощью маркера единого входа. Этот метод можно использовать для разработки собственного обработчика команд единого входа.
Переместите папку в auth/publicsrc/public. Эта папка содержит HTML-страницы для приложения бота. При инициации потоков единого входа с Microsoft Entra пользователь перенаправляется на эти страницы.
Обновите commandApp.requestHandler , чтобы убедиться, что проверка подлинности работает со следующим кодом:
await commandApp.requestHandler(req, res).catch((err) => {
// Error message including "412" means it is waiting for user's consent, which is a normal process of SSO, sholdn't throw this error.
if (!err.message.includes("412")) {
throw err;
}
});
Добавьте ssoConfig и ssoCommands в src/internal/initializeConversationBot :
import { ProfileSsoCommandHandler } from "../profileSsoCommandHandler";
export const commandBot = new ConversationBot({
...
// To learn more about ssoConfig, please refer teamsfx sdk document: https://docs.microsoft.com/microsoftteams/platform/toolkit/teamsfx-sdk
ssoConfig: {
aad :{
scopes:["User.Read"],
},
},
command: {
enabled: true,
commands: [new HelloWorldCommandHandler() ],
ssoCommands: [new ProfileSsoCommandHandler()],
},
});
Реализуйте ключ handleMessageExtensionQueryWithSSO API в TeamsActivityHandler.handleTeamsMessagingExtensionQuery. Дополнительные сведения см. в статье Единый вход для расширений сообщений.
Переместите папку в auth/publicsrc/public. Эта папка содержит HTML-страницы для приложения бота. При инициации потоков единого входа с Microsoft Entra пользователь перенаправляется на эти страницы.
Обновите src/index файл, чтобы добавить соответствующий restify:
const path = require("path");
// Listen for incoming requests.
server.post("/api/messages", async (req, res) => {
await adapter.process(req, res, async (context) => {
await bot.run(context);
}).catch((err) => {
// Error message including "412" means it is waiting for user's consent, which is a normal process of SSO, sholdn't throw this error.
if(!err.message.includes("412")) {
throw err;
}
})
});
server.get(
"/auth-:name(start|end).html",
restify.plugins.serveStatic({
directory: path.join(__dirname, "public"),
})
);
Выполните следующие команды в ./ папке:
npm install @microsoft/teamsfx
npm install isomorphic-fetch
Реализуйте ключ handleMessageExtensionQueryWithSSO API в TeamsActivityHandler.handleTeamsMessagingExtensionQuery.
Установите copyfiles пакеты npm в проекте бота TypeScript и обновите build скрипт в src/package.json файле следующим образом:
Чтобы отладить приложение, выберите клавишу F5 . Teams Toolkit использует манифест Microsoft Entra для регистрации приложения с поддержкой единого входа. Дополнительные сведения см. в статье Отладка приложения Teams локально.
Настройка приложений Microsoft Entra
Манифест приложения Teams позволяет настраивать различные аспекты регистрации приложения. Манифест можно обновить по мере необходимости.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.