Authentifizieren eines Benutzers in einem Microsoft Teams-botAuthenticate a user in a Microsoft Teams bot

Wichtig

Die Artikel in diesem Abschnitt basieren auf dem V3 bot Framework SDK.The articles in this section are based on the v3 Bot Framework SDK. Wenn Sie nach der aktuellen Dokumentation (Version 4,6 oder höher des SDK) suchen, lesen Sie den Abschnitt conversational Bots .If you're looking for current documentation (version 4.6 or later of the SDK) see the Conversational Bots section.

Es gibt viele Dienste, die Sie in Ihrer Teams-App möglicherweise nutzen möchten, und die meisten dieser Dienste erfordern Authentifizierung und Autorisierung, um Zugriff auf den Dienst zu erhalten.There are many services that you may wish to consume inside your Teams app, and most of those services require authentication and authorization to get access to the service. Zu den Diensten gehören Facebook, Twitter und natürlich Teams.Services include Facebook, Twitter, and of course Teams. Benutzer von Teams haben Benutzerprofilinformationen, die in Azure Active Directory (Azure AD) mit Microsoft Graph gespeichert werden.Users of Teams have user profile information stored in Azure Active Directory (Azure AD) using Microsoft Graph. Dieser Artikel konzentriert sich auf die Authentifizierung mit Azure AD, um Zugriff auf diese Informationen zu erhalten.This article will focus on authentication using Azure AD to get access to this information.

OAuth 2,0 ist ein offener Standard für die Authentifizierung, der von Azure AD und vielen anderen Dienstanbietern verwendet wird.OAuth 2.0 is an open standard for authentication used by Azure AD and many other service providers. Das Verständnis von OAuth 2,0 ist eine Voraussetzung für die Verwendung der Authentifizierung in Microsoft Teams und Azure AD.Understanding OAuth 2.0 is a prerequisite for working with authentication in Teams and Azure AD. Die folgenden Beispiele verwenden den impliziten Grant-Fluss von OAuth 2,0 mit dem Ziel, die Profilinformationen des Benutzers schließlich aus Azure AD und Microsoft Graph zu lesen.The examples below use the OAuth 2.0 Implicit Grant flow with the goal of eventually reading the user's profile information from Azure AD and Microsoft Graph.

Der in diesem Artikel beschriebene Authentifizierungs Fluss ähnelt dem von Tabs, mit der Ausnahme, dass Registerkarten den webbasierten Authentifizierungs Fluss verwenden können, und Bots erfordern, dass die Authentifizierung von Code gesteuert wird.The authentication flow described in this article is very similar to that of tabs except that tabs can use web based authentication flow, and bots require authentication to be driven from code. Die Konzepte in diesem Artikel sind auch hilfreich, wenn Sie die Authentifizierung von der mobilen Plattform implementieren.The concepts in this article will also be useful when implementing authentication from the mobile platform.

Eine allgemeine Übersicht über den Authentifizierungsablauf für Bots finden Sie im Thema Authentifizierungs Fluss in Bots.For a general overview of authentication flow for bots see the topic Authentication flow in bots.

Konfigurieren von IdentitätsanbieternConfiguring identity providers

Lesen Sie das Thema configure Identity Providers for ausführliche steps on Configuring OAuth 2,0 Callback Redirect URL (s) bei Verwendung von Azure Active Directory als Identitätsanbieter.See the topic Configure identity providers for detailed steps on configuring OAuth 2.0 callback redirect URL(s) when using Azure Active Directory as an identity provider.

Initiieren des Authentifizierungs FlussesInitiate authentication flow

Der Authentifizierungs Fluss sollte durch eine Benutzeraktion ausgelöst werden.Authentication flow should be triggered by a user action. Sie sollten das Authentifizierungs Popup nicht automatisch öffnen, da dies wahrscheinlich den Popupblocker des Browsers auslösen und den Benutzer verwirren kann.You should not open the authentication pop-up automatically because this is likely to trigger the browser's pop-up blocker as well as confuse the user.

Hinzufügen einer Benutzeroberfläche zum Starten der AuthentifizierungAdd UI to start authentication

Fügen Sie der bot-Benutzeroberfläche hinzu, um dem Benutzer die Anmeldung bei Bedarf zu ermöglichen.Add UI to the bot to enable the user to sign in when needed. Hier erfolgt die Arbeit über eine Miniatur Ansichtskarte in einer Fingerabdruck Ansicht:Here it is done from a Thumbnail card, in TypeScript:

// Show prompt of options
protected async promptForAction(session: builder.Session): Promise<void> {
    let msg = new builder.Message(session)
        .addAttachment(new builder.ThumbnailCard(session)
            .title(this.providerDisplayName)
            .buttons([
                 builder.CardAction.messageBack(session, "{}", "Sign in")
                     .text("SignIn")
                     .displayText("Sign in"),
                  builder.CardAction.messageBack(session, "{}", "Show profile")
                     .text("ShowProfile")
                     .displayText("Show profile"),
                  builder.CardAction.messageBack(session, "{}", "Sign out")
                     .text("SignOut")
                     .displayText("Sign out"),
            ]));
    session.send(msg);
}

Der Hero Card wurden drei Schaltflächen hinzugefügt: anmelden, Profil anzeigen und abmelden.Three buttons have been added to the Hero Card: Sign in, Show Profile, and Sign out.

Signieren des Benutzers inSign the user in

Aufgrund der Überprüfung, die aus Sicherheitsgründen ausgeführt werden muss, und der Unterstützung für die mobilen Versionen von Teams wird der Code hier nicht gezeigt, aber hier sehen Sie ein Beispiel für den Code, der den Prozess startet, wenn der Benutzer auf die Schaltfläche Anmelden klickt..Because of the validation that must be performed for security reasons and the support for the mobile versions of Teams, the code isn't shown here, but here's an example of the code that kicks off the process when the user presses the Sign in button..

Die Überprüfung und Mobile Unterstützung werden im Thema Authentifizierungs Fluss in Botserläutert.The validation and mobile support are explained in the topic Authentication flow in bots.

Stellen Sie sicher, dass Sie die Domäne ihrer Authentifizierungs Umleitungs-URL dem validDomains Abschnitt des Manifests hinzufügen.Be sure to add the domain of your authentication redirect URL to the validDomains section of the manifest. Wenn dies nicht der Fall ist, wird das Anmeldefenster nicht angezeigt.If you don't, the login popup will not appear.

Anzeigen von BenutzerprofilinformationenShowing user profile information

Obwohl das Abrufen eines Zugriffstokens aufgrund aller Übergänge zwischen verschiedenen Websites und der Sicherheitsprobleme, die behoben werden müssen, schwierig ist, wenn Sie über ein Token verfügen, ist das Abrufen von Informationen aus Azure Active Directory einfach.Although getting an access token is difficult because of all the transitions back and forth across different websites and the security issues that must be addressed, once you have a token, obtaining information from Azure Active Directory is straightforward. Der bot führt einen Aufruf des me Graph-Endpunkts mit dem Zugriffstoken aus.The bot makes a call to the me Graph endpoint with the access token. Graph antwortet mit den Benutzerinformationen für die Person, die sich angemeldet hat.Graph responds with the user information for the person who logged in. Informationen aus der Antwort werden verwendet, um eine bot-Karte zu erstellen und zu senden.Information from the response is used to construct a bot card and sent.

// Show user profile
protected async showUserProfile(session: builder.Session): Promise<void> {
    let azureADApi = this.authProvider as AzureADv1Provider;
    let userToken = this.getUserToken(session);

    if (userToken) {
        let profile = await azureADApi.getProfileAsync(userToken.accessToken);
        let profileCard = new builder.ThumbnailCard()
            .title(profile.displayName)
            .subtitle(profile.mail)
            .text(`${profile.jobTitle}<br/> ${profile.officeLocation}`);
        session.send(new builder.Message().addAttachment(profileCard));
    } else {
        session.send("Please sign in to AzureAD so I can access your profile.");
    }

    await this.promptForAction(session);
}

// Helper function to make the Graph API call
public async getProfileAsync(accessToken: string): Promise<any> {
    let options = {
        url: "https://graph.microsoft.com/v1.0/me",
        json: true,
        headers: {
            "Authorization": `Bearer ${accessToken}`,
        },
    };
    return await request.get(options);
}

Wenn der Benutzer nicht angemeldet ist, werden Sie dazu aufgefordert.If the user is not signed in they are prompted to do so.

Den Benutzer abmeldenSign the user out

// Handle user logout request
private async handleLogout(session: builder.Session): Promise<void> {
    if (!utils.getUserToken(session, this.providerName)) {
        session.send(`You're already signed out of ${this.providerDisplayName}.`);
    } else {
        utils.setUserToken(session, this.providerName, null);
        session.send(`You're now signed out of ${this.providerDisplayName}.`);
    }

    await this.promptForAction(session);
}

Weitere BeispieleOther samples

Beispielcode zum Anzeigen des bot-Authentifizierungsprozesses finden Sie unter:For sample code showing the bot authentication process see: