Microsoft Teams bietet eine Funktion für einmaliges Anmelden (Single Sign-On, SSO) für eine App, um ein angemeldetes Teams-Benutzertoken für den Zugriff auf Microsoft Graph und andere APIs abzurufen. Microsoft 365 Agents Toolkit (früher als Teams Toolkit bezeichnet) optimiert den Prozess, indem bestimmte Microsoft Entra Workflows und Integrationen in einfache, allgemeine APIs integriert werden. Daher können Sie SSO-Funktionen mühelos in Ihre Teams-App integrieren. Weitere Informationen finden Sie unter Authentifizieren von Benutzern in Microsoft Teams.
Schlüsselkonfigurationen
Um einmaliges Anmelden zu aktivieren, konfigurieren Sie Ihre Teams-App wie folgt:
Microsoft Entra App-Manifest: Stellen Sie sicher, dass Sie URIs definieren, einschließlich des URI, der die Microsoft Entra Authentifizierungs-App identifiziert, und den Umleitungs-URI, der das Token zurückgibt.
Teams-App-Manifest: Verbinden Sie Ihre SSO-App mit Ihrer Teams-App, indem Sie die richtige Konfiguration integrieren.
Agents Toolkit-Konfiguration und Infrastrukturdateien: Stellen Sie sicher, dass die erforderlichen Konfigurationen vorhanden sind, um einmaliges Anmelden für Ihre Teams-App zu aktivieren.
SSO-App-Informationen in Agents Toolkit-Konfigurationsdateien: Stellen Sie sicher, dass die Authentifizierungs-App beim Back-End-Dienst registriert und das Agents Toolkit sie während des Debuggens oder der Vorschau der Teams-App initiiert.
Erstellen Microsoft Entra App-Manifests
Laden Sie die Microsoft Entra-App-Manifestvorlage herunter.
Fügen Sie den heruntergeladenen App-Manifestvorlagencode zur Datei hinzu ./aad.manifest.json
. Auf diese Weise können Sie verschiedene Aspekte Ihrer App-Registrierung anpassen und das Manifest nach Bedarf aktualisieren. Weitere Informationen finden Sie unter App-Manifest.
Aktualisieren des Teams-App-Manifests
Fügen Sie in der ./appPackages/manifest.json
Datei den folgenden Code hinzu:
"webApplicationInfo": {
"id": "${{AAD_APP_CLIENT_ID}}",
"resource": "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}"
}
webApplicationInfo
stellt Ihre Microsoft Entra App-ID und Microsoft Graph-Informationen bereit, um Benutzern bei der Anmeldung bei Ihrer App zu helfen.
Hinweis
Sie können verwenden {{ENV_NAME}}
, um auf Variablen in der env/.env.{TEAMSFX_ENV}
Datei zu verweisen.
Suchen Sie Ihre Agents Toolkit-Konfigurationsdateien, z ./m365agents.yml
. B. und ./m365agents.local.yml
. Aktualisieren Sie die erforderlichen Konfigurationen im Zusammenhang mit Microsoft Entra in diesen Dateien.
Fügen Sie die aadApp/create
Aktion unter und ./m365agents.local.yml
hinzu provision
./m365agents.yml
, um eine neue Microsoft Entra App zu erstellen, die für einmaliges Anmelden verwendet wird:
- uses: aadApp/create
with:
name: "YOUR_AAD_APP_NAME"
generateClientSecret: true
signInAudience: "AzureADMyOrg"
writeToEnvironmentFile:
clientId: AAD_APP_CLIENT_ID
clientSecret: SECRET_AAD_APP_CLIENT_SECRET
objectId: AAD_APP_OBJECT_ID
tenantId: AAD_APP_TENANT_ID
authority: AAD_APP_OAUTH_AUTHORITY
Hinweis
Ersetzen Sie den name
Wert durch den gewünschten Namen für Ihre Teams-App.
Weitere Informationen finden Sie unter aadApp/create
.
Fügen Sie die aadApp/update
Aktion unter und ./m365agents.local.yml
hinzu provision
./m365agents.yml
, um Ihre Microsoft Entra-App zu aktualisieren:
- uses: aadApp/update
with:
manifestPath: "./aad.manifest.json"
outputFilePath: "./build/aad.manifest.${{TEAMSFX_ENV}}.json"
Hinweis
- Aktualisieren Sie den
manifestPath
Wert in den relativen Pfad der Microsoft Entra App-Manifestvorlageaad.manifest.json
, wenn Sie den Pfad der Datei geändert haben.
- Positionieren Sie in einem lokalen Setup den
aad/update
nach der file/createOrUpdateEnvironmentFile
Aktion. Dies ist erforderlich, da aad/update
die Ausgabe von file/createOrUpdateEnvironmentFile
verwendet wird.
Weitere Informationen finden Sie unter aadApp/update
.
Aktualisieren cli/runNpmCommand
Sie für ein React-Projekt unter deploy
.
Wenn Sie eine Registerkarten-App mit dem React Framework in der CLI erstellen, suchen Sie die cli/runNpmCommand
Aktion mit build app
in der m365agents.yml
Datei, und fügen Sie die folgenden Umgebungsvariablen hinzu:
env:
REACT_APP_CLIENT_ID: ${{AAD_APP_CLIENT_ID}}
REACT_APP_START_LOGIN_PAGE_URL: ${{TAB_ENDPOINT}}/auth-start.html
Wenn Sie eine Registerkarten-App mit React Framework erstellen, suchen Sie die Aktion für die Bereitstellung in m365agents.local.yml
der file/createOrUpdateEnvironmentFile
Datei, und fügen Sie die folgenden Umgebungsvariablen hinzu:
envs:
...
REACT_APP_CLIENT_ID: ${{AAD_APP_CLIENT_ID}}
REACT_APP_START_LOGIN_PAGE_URL: ${{TAB_ENDPOINT}}/auth-start.html
Aktualisieren des Quellcodes
Nachdem die oben genannten Änderungen implementiert wurden, ist Ihre Umgebung vorbereitet. Sie können jetzt Ihren Code aktualisieren, um SSO in Ihre Teams-App zu integrieren.
Vanilla JavaScript
Verwenden Sie für eine Registerkarten-App, die nicht React verwendet, den folgenden Code als einfaches Beispiel, um das SSO-Token abzurufen:
function getSSOToken() {
return new Promise((resolve, reject) => {
microsoftTeams.authentication.getAuthToken()
.then((token) => resolve(token))
.catch((error) => reject("Error getting token: " + error));
});
}
function getBasicUserInfo() {
getSSOToken().then((ssoToken) => {
const tokenObj = JSON.parse(window.atob(ssoToken.split(".")[1]));
console.log(`username: ${tokenObj.name}`);
console.log(`user email: ${tokenObj.preferred_username}`);
});
}
React
Stellen Sie für React Projekte sicher, dass die folgenden Umgebungsvariablen im Bereitstellungsprozess festgelegt sind:
Führen Sie die folgenden Schritte aus, um Ihren Quellcode zu aktualisieren:
Verschieben Sie die auth-start.html
Dateien und auth-end.html
aus dem auth/public
Ordner in den public/
Ordner. Diese HTML-Dateien dienen der Verarbeitung von Authentifizierungsumleitungen.
Verschieben Sie sso
den Ordner unter in auth/
src/sso/
.
-
InitTeamsFx
: Diese Datei führt eine Funktion aus, die das TeamsFx SDK initialisiert. Nach der SDK-Initialisierung wird die GetUserProfile
Komponente geöffnet.
-
GetUserProfile
: Diese Datei führt eine Funktion aus, um Benutzerinformationen durch Aufrufen des Microsoft-Graph-API abzurufen.
Importieren Sie , und fügen Sie sie hinzu InitTeamsFx
Welcome.*
.
Weitere Informationen finden Sie unter SSO-aktivierte Registerkarten-App.
Erstellen Microsoft Entra App-Manifests
Laden Sie die Microsoft Entra-App-Manifestvorlage herunter.
Fügen Sie den heruntergeladenen App-Manifestvorlagencode zur Datei hinzu ./aad.manifest.json
. Auf diese Weise können Sie verschiedene Aspekte Ihrer App-Registrierung anpassen und das Manifest nach Bedarf aktualisieren. Weitere Informationen finden Sie unter App-Manifest.
Aktualisieren des Teams-App-Manifests
Fügen Sie in der ./appPackages/manifest.json
Datei den folgenden Code hinzu:
"webApplicationInfo": {
"id": "${{AAD_APP_CLIENT_ID}}",
"resource": "api://${{TAB_DOMAIN}}/${{AAD_APP_CLIENT_ID}}"
}
webApplicationInfo
stellt Ihre Microsoft Entra App-ID und Microsoft Graph-Informationen bereit, um Benutzern bei der Anmeldung bei Ihrer App zu helfen.
Hinweis
Sie können verwenden {{ENV_NAME}}
, um auf Variablen in der env/.env.{TEAMSFX_ENV}
Datei zu verweisen.
Registrieren Sie mindestens einen Befehl in commandLists
.
Enthält commandLists
Befehle, die Ihr Bot Benutzern vorschlagen kann. Wenn Sie die teamsFx
Botvorlage verwenden, legen Sie die folgenden Werte fest:
{
"title": "profile",
"description": "Show user profile using Single Sign On feature"
}
Das validDomains
Feld enthält die Domänen für Websites, die die App innerhalb des Teams-Clients lädt. Aktualisieren Sie den folgenden Wert:
"validDomains": [
"${{BOT_DOMAIN}}"
]
Suchen Sie Ihre Agents Toolkit-Konfigurationsdateien, z ./m365agents.yml
. B. und ./m365agents.local.yml
. Aktualisieren Sie die erforderlichen Konfigurationen im Zusammenhang mit Microsoft Entra in diesen Dateien.
Fügen Sie den folgenden Code aadApp/create
unter und ./m365agents.local.yml
hinzu provision
./m365agents.yml
, um neue Microsoft Entra-Apps zu erstellen, die für einmaliges Anmelden verwendet werden:
- uses: aadApp/create
with:
name: "YOUR_AAD_APP_NAME"
generateClientSecret: true
signInAudience: "AzureADMyOrg"
writeToEnvironmentFile:
clientId: AAD_APP_CLIENT_ID
clientSecret: SECRET_AAD_APP_CLIENT_SECRET
objectId: AAD_APP_OBJECT_ID
tenantId: AAD_APP_TENANT_ID
authority: AAD_APP_OAUTH_AUTHORITY
authorityHost: AAD_APP_OAUTH_AUTHORITY_HOST
Hinweis
Ersetzen Sie den name
Wert durch den gewünschten Namen für Ihre Microsoft Teams-App.
Weitere Informationen finden Sie unter aadApp/create
.
Fügen Sie den folgenden Code aadApp/update
unter ./m365agents.yml
provision
und ./m365agents.local.yml
hinzu, um Ihre Microsoft Entra-App zu aktualisieren:
- uses: aadApp/update
with:
manifestPath: "./aad.manifest.json"
outputFilePath: "./build/aad.manifest.${{TEAMSFX_ENV}}.json"
Hinweis
Aktualisieren Sie den manifestPath
Wert in den relativen Pfad der Microsoft Entra App-Manifestvorlageaad.manifest.json
, wenn Sie den Pfad der Datei geändert haben.
Weitere Informationen finden Sie unter aadApp/update
.
Suchen Sie die Aktion in m365agents.local.yml
der createOrUpdateEnvironmentFile
Datei, und fügen Sie die folgenden Umgebungsvariablen hinzu:
envs:
...
M365_CLIENT_ID: ${{AAD_APP_CLIENT_ID}}
M365_CLIENT_SECRET: ${{SECRET_AAD_APP_CLIENT_SECRET}}
M365_TENANT_ID: ${{AAD_APP_TENANT_ID}}
INITIATE_LOGIN_ENDPOINT: ${{BOT_ENDPOINT}}/auth-start.html
M365_AUTHORITY_HOST: ${{AAD_APP_OAUTH_AUTHORITY_HOST}}
M365_APPLICATION_ID_URI: api://botid-${{BOT_ID}}
Aktualisieren der Infrastruktur
Aktualisieren Sie Microsoft Entra konfigurationen in Ihrem Remotedienst. Das folgende Beispiel zeigt die Konfigurationseinstellungen für eine Azure-Web-App:
-
M365_CLIENT_ID
: Microsoft Entra App-Client-ID
-
M365_CLIENT_SECRET
: Microsoft Entra geheimer Clientschlüssel der App
-
M365_TENANT_ID
: Mandanten-ID der Microsoft Entra-App
-
INITIATE_LOGIN_ENDPOINT
: Anmeldestartseite für die Authentifizierung
-
M365_AUTHORITY_HOST
: Microsoft Entra App-OAuth-Autoritätshost
-
M365_APPLICATION_ID_URI
: Bezeichner-URI für Microsoft Entra App
Führen Sie die folgenden Schritte aus, um die teamsFx
Registerkarten- oder Botvorlage zu verwenden:
Öffnen Sie die infra/azure.parameters.json
Datei, und fügen Sie den folgenden Code hinzu:
"m365ClientId": {
"value": "${{AAD_APP_CLIENT_ID}}"
},
"m365ClientSecret": {
"value": "${{SECRET_AAD_APP_CLIENT_SECRET}}"
},
"m365TenantId": {
"value": "${{AAD_APP_TENANT_ID}}"
},
"m365OauthAuthorityHost": {
"value": "${{AAD_APP_OAUTH_AUTHORITY_HOST}}"
}
Öffnen Sie infra/azure.bicep
die Datei, und fügen Sie den folgenden Code nach hinzu param location string = resourceGroup().location
:
param m365ClientId string
param m365TenantId string
param m365OauthAuthorityHost string
param m365ApplicationIdUri string = 'api://botid-${botAadAppClientId}'
@secure()
param m365ClientSecret string
Fügen Sie den folgenden Code in der infra/azure.bicep
Datei hinzuoutput
:
resource webAppSettings 'Microsoft.Web/sites/config@2021-02-01' = {
name: '${webAppName}/appsettings'
properties: {
M365_CLIENT_ID: m365ClientId
M365_CLIENT_SECRET: m365ClientSecret
INITIATE_LOGIN_ENDPOINT: uri('https://${webApp.properties.defaultHostName}', 'auth-start.html')
M365_AUTHORITY_HOST: m365OauthAuthorityHost
M365_TENANT_ID: m365TenantId
M365_APPLICATION_ID_URI: m365ApplicationIdUri
BOT_ID: botAadAppClientId
BOT_PASSWORD: botAadAppClientSecret
RUNNING_ON_AZURE: '1'
}
}
Hinweis
- Um ihrer Azure-Web-App zusätzliche Konfigurationen hinzuzufügen, fügen Sie die Konfigurationen in hinzu
webAppSettings
.
- Möglicherweise müssen Sie auch die Standardknotenversion definieren, indem Sie die folgende Konfiguration hinzufügen:
bash WEBSITE_NODE_DEFAULT_VERSION: '14.20.0'
Aktualisieren des Quellcodes
Verschieben Sie die Dateien im auth/sso
Ordner in src
. Die ProfileSsoCommandHandler
-Klasse dient als SSO-Befehlshandler zum Abrufen von Benutzerinformationen mithilfe eines SSO-Tokens. Sie können diese Methode verwenden, um Ihren eigenen SSO-Befehlshandler zu entwickeln.
Verschieben Sie den auth/public
Ordner in src/public
. Dieser Ordner enthält HTML-Seiten für die Bot-App. Beim Initiieren von SSO-Flows mit Microsoft Entra wird der Benutzer zu diesen Seiten umgeleitet.
Führen Sie den folgenden Befehl im ./
Ordner aus:
npm install copyfiles --save-dev
Aktualisieren Sie den folgenden Befehl in der package.json
Datei:
"build": "tsc --build && shx cp -r ./src/adaptiveCards ./lib/src && copyfiles src/public/*.html lib/",
Die html-Seiten, die für die Authentifizierungsumleitung verwendet werden, werden beim Erstellen dieses Botprojekts kopiert.
src/index
Fügen Sie in der Datei den folgenden Befehl hinzu, um zu importierenisomorphic-fetch
:
require("isomorphic-fetch");
Fügen Sie den folgenden Befehl hinzu, um zu Authentifizierungsseiten umzuleiten:
server.get(
"/auth-:name(start|end).html",
restify.plugins.serveStatic({
directory: path.join(__dirname, "public"),
})
);
Aktualisieren Sie commandApp.requestHandler
, um sicherzustellen, dass die Authentifizierung mit dem folgenden Code funktioniert:
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;
}
});
Fügen Sie und ssoCommands
in src/internal/initialize
ConversationBot
hinzussoConfig
:
import { ProfileSsoCommandHandler } from "../profileSsoCommandHandler";
export const commandBot = new ConversationBot({
...
// To learn more about ssoConfig, please refer atk 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()],
},
});
Implementieren Sie den API-Schlüssel handleMessageExtensionQueryWithSSO
in TeamsActivityHandler.handleTeamsMessagingExtensionQuery
. Weitere Informationen finden Sie unter SSO für Nachrichtenerweiterungen.
Verschieben Sie den auth/public
Ordner in src/public
. Dieser Ordner enthält HTML-Seiten für die Bot-App. Beim Initiieren von SSO-Flows mit Microsoft Entra wird der Benutzer zu diesen Seiten umgeleitet.
Aktualisieren Sie Ihre src/index
Datei, um die entsprechende restify
hinzuzufügen:
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"),
})
);
Führen Sie die folgenden Befehle im ./
Ordner aus:
npm install @microsoft/atk
npm install isomorphic-fetch
Implementieren Sie den API-Schlüssel handleMessageExtensionQueryWithSSO
in TeamsActivityHandler.handleTeamsMessagingExtensionQuery
.
Installieren Sie copyfiles
npm-Pakete in Ihrem TypeScript-Botprojekt, und aktualisieren Sie das Skript in src/package.json
der build
Datei wie folgt:
"build": "tsc --build && copyfiles ./public/*.html lib/",
Die html-Seiten, die für die Authentifizierungsumleitung verwendet werden, werden beim Erstellen dieses Botprojekts kopiert.
Aktualisieren Sie templates/appPackage/aad.template.json
die Datei mit den Bereichen, die Sie in der handleMessageExtensionQueryWithSSO
Funktion verwenden:
"requiredResourceAccess": [
{
"resourceAppId": "Microsoft Graph",
"resourceAccess": [
{
"id": "User.Read",
"type": "Scope"
}
]
}
]
Debuggen Ihrer App
Um Ihre App zu debuggen, drücken Sie die Taste F5 . Agents Toolkit verwendet das Microsoft Entra-Manifest, um eine SSO-fähige App zu registrieren. Weitere Informationen finden Sie unter Lokales Debuggen Ihrer Teams-App.
Anpassen Microsoft Entra Apps
Mit dem Teams-App-Manifest können Sie verschiedene Aspekte Ihrer App-Registrierung anpassen. Sie können das Manifest nach Bedarf aktualisieren.
Weitere API-Berechtigungen für den Zugriff auf die gewünschten APIs finden Sie unter Bearbeiten Microsoft Entra Manifests.
Informationen zum Anzeigen Ihrer Microsoft Entra-App in Azure-Portal finden Sie unter Bearbeiten Microsoft Entra Manifests.
Siehe auch