BenutzerauthentifizierungUser authentication

gilt für: SDK v4APPLIES TO: SDK v4

Manchmal muss ein Bot im Namen des Benutzers auf geschützte Onlineressourcen zugreifen, z. B. E-Mail-Adresse überprüfen, Flugstatus überprüfen oder Eine Bestellung aufgeben.At times a bot must access secured online resources on behalf of the user, such as checking email, checking on flight status, or placing an order. Der Benutzer muss den Bot dazu in dessen Namen autorisieren, und um den Bot zu autorisieren, muss er seine Identität authentifizieren.The user must authorize the bot to do so on their behalf, and in order to authorize the bot, the user must authenticate their identity. OAuth wird verwendet, um den Benutzer zu authentifizieren und den Bot zu autorisieren.OAuth is used to authenticate the user and authorize the bot. Siehe auch Authentifizierungstypen.See also Authentication types.

Ihre OAuth-Kenntnisse können Sie bei Bedarf anhand der folgenden Artikel auffrischen:If you want to refresh your OAuth knowledge, see the following:

Benutzerauthentifizierung in einer KonversationUser authentication in a conversation

Zum Ausführen bestimmter Vorgänge im Namen eines Benutzers, z. B. das Überprüfen von E-Mails, Verweisen auf einen Kalender, Überprüfen des Flugstatus oder Aufgeben einer Bestellung, muss der Bot einen externen Dienst wie Microsoft Graph, GitHub oder den REST-Dienst eines Unternehmens aufrufen.To perform certain operations on behalf of a user, such as checking email, referencing a calendar, checking on flight status, or placing an order, the bot will need to call an external service, such as the Microsoft Graph, GitHub, or a company's REST service. Jeder externe Dienst verfügt über eine Möglichkeit, diese Aufrufe zu schützen.Each external service has a way of securing those calls. Eine gängige Ausgabemethode für diese Anforderungen ist die Verwendung eines Benutzertokens, das den Benutzer in diesem externen Dienst eindeutig identifiziert. (Dieses Token wird manchmal auch als JSON Web Token (JWT) bezeichnet.)A common way to issue those requests is to use a user token that uniquely identifies the user on that external service (sometimes referred to as a JSON Web Token (JWT)).

Zum Sichern des Aufrufs eines externen Diensts muss der Bot den Benutzer auffordern, sich anzumelden, damit er das Token des Benutzers für diesen Dienst abrufen kann.To secure the call to an external service, the bot must ask the user to sign-in, so it can acquire the user's token for that service. Viele Dienste unterstützen den Tokenabruf über das Protokoll OAuth oder OAuth2.Many services support token retrieval via the OAuth or OAuth2 protocol.

Der Azure Bot Service bietet spezielle Karten und Dienste für die Anmeldung, die das OAuth-Protokoll verwenden und den Token-Lebenszyklus verwalten.The Azure Bot Service provides specialized sign-in cards and services that work with the OAuth protocol and manage the token life-cycle. Ein Bot kann diese Features nutzen, um ein Benutzertoken abzurufen.A bot can use these features to acquire a user token.

  • Im Rahmen der Botkonfiguration wird eine OAuth-Verbindung in der Azure Bot Service-Ressource in Azure registriert.As part of bot configuration, an OAuth connection is registered within the Azure Bot Service resource in Azure.

    Die Verbindung enthält Informationen zum zu verwendenden Identitätsanbieter sowie eine gültige OAuth-Client-ID und ein entsprechendes Geheimnis, die zu aktivierenden OAuth-Bereiche und alle anderen Verbindungsmetadaten, die von diesem Identitätsanbieter benötigt werden.The connection contains information about the identity provider to use, along with a valid OAuth client ID and secret, the OAuth scopes to enable, and any other connection metadata required by that identity provider.

  • Im Code des Bots wird die OAuth-Verbindung verwendet, um den Benutzer anzumelden und das Benutzertoken zu erhalten.In the bot's code, the OAuth connection is used to help sign-in the user and get the user token.

Die folgende Abbildung zeigt die am Authentifizierungsprozess beteiligten Elemente:The following image shows the elements involved in the authentication process.

Komponenten der Botauthentifizierung

Informationen zum Bot Framework-TokendienstAbout the Bot Framework Token Service

Der Bot Framework-Tokendienst ist zuständig für:The Bot Framework Token Service is responsible for:

  • Erleichterung der Nutzung des OAuth-Protokolls mit einer Vielzahl von externen DienstenFacilitating the use of the OAuth protocol with a wide variety of external services.
  • Sicheres Speichern von Token für einen bestimmten Bot, Kanal, eine bestimmte Konversation und einen bestimmten BenutzerSecurely storing tokens for a particular bot, channel, conversation, and user.
  • Abrufen von BenutzertokenAcquiring user tokens.

    Tipp

    Enthält der Bot ein abgelaufenes Benutzertoken, muss er folgende Aktionen ausführen:If the bot has an expired user token, the bot should:

    • Abmelden des BenutzersLog the user out
    • Erneutes Initiieren des AnmeldeflowsInitiate the sign in flow again

Ein Bot, der über die Microsoft Graph-API die neuesten E-Mails eines Benutzers abrufen kann, benötigt beispielsweise ein Benutzertoken von einem Identitätsanbieter (in diesem Fall: Azure Active Directory).For example, a bot that can check a user's recent emails, using the Microsoft Graph API, requires a user token from an Identity Provider, in this case Azure Active Directory. Zur Entwurfszeit führt der Botentwickler zwei wichtige Schritte aus:At design time, the bot developer performs these two important steps:

  1. Er registriert über das Azure-Portal eine Azure Active Directory-Anwendung (Identitätsanbieter) beim Bot Framework-Tokendienst.Registers an Azure Active Directory application, an Identity Provider, with the Bot Framework Token Service, via the Azure Portal.
  2. Er konfiguriert eine OAuth-Verbindung (beispielsweise mit dem Namen GraphConnection) für den Bot.Configures an OAuth connection (named for example GraphConnection) for the bot.

Die folgende Abbildung zeigt den zeitlichen Ablauf der Benutzerinteraktion mit einem Bot am Beispiel einer E-Mail-Anforderung über den Microsoft Graph-Dienst:The following picture shows the time sequence of the user's interaction with a bot when an email request is made using the Microsoft Graph service.

Zeitlicher Ablauf bei der Botauthentifizierung

  1. Der Benutzer sendet eine E-Mail-Anforderung an den Bot.The user makes an email request to the bot.

  2. Eine Aktivität mit dieser Nachricht wird vom Benutzer an den Bot Framework-Kanaldienst gesendet.An activity with this message is sent from the user to the Bot Framework channel service. Der Kanaldienst stellt sicher, dass das Feld userid in der Aktivität festgelegt wurde und die Nachricht an den Bot gesendet wird.The channel service ensures that the userid field within the activity has been set and the message is sent to the bot.

    Hinweis

    Benutzer-IDs sind kanalspezifisch. Beispiele wären etwa die Facebook-ID des Benutzers oder die Telefonnummer für SMS-Nachrichten.User ID's are channel specific, such as the user's Facebook ID or their SMS phone number.

  3. Der Bot sendet eine Anforderung an den Bot Framework-Tokendienst, um zu ermitteln, ob bereits ein Token für die Benutzer-ID für die OAuth-Verbindung GraphConnection vorhanden ist.The bot makes a request to the Bot Framework Token Service asking if it already has a token for the UserId for the OAuth connection GraphConnection.

  4. Da dies das erste Mal ist, dass dieser Benutzer mit dem Bot interagiert, hat der Bot Framework-Tokendienst noch kein Token für diesen Benutzer und gibt ein NotFound-Ergebnis an den Bot zurück.Since this is the first time this user has interacted with the bot, the Bot Framework Token Service does not yet have a token for this user, and returns a NotFound result to the bot.

    Hinweis

    Wird das Token gefunden, werden die Authentifizierungsschritte übersprungen, und der Bot kann für die E-Mail-Anforderung das gespeicherte Token verwenden.If the token is found, the authentication steps are skipped and the bot can make the email request using the stored token.

  5. Der Bot erstellt eine OAuth-Karte mit dem Verbindungsnamen GraphConnection und fordert den Benutzer auf, sich über diese Karte anzumelden.The bot creates an OAuthCard with a connection name of GraphConnection and replies to the user asking to sign-in using this card.

  6. Die Aktivität durchläuft den Bot Framework-Kanaldienst, der den Bot Framework-Tokendienst aufruft, um eine gültige OAuth-Anmelde-URL für diese Anforderung zu erstellen.The activity passes through the Bot Framework Channel Service, which calls into the Bot Framework Token Service to create a valid OAuth sign-in URL for this request. Diese Anmelde-URL wird der OAuth-Karte hinzugefügt, und die Karte wird an den Benutzer zurückgegeben.This sign-in URL is added to the OAuthCard and the card is returned to the user.

  7. Dem Benutzer wird beim Anklicken der Anmeldeschaltfläche der OAuth-Karte eine Nachricht zur Anmeldung angezeigt.The user is presented with a message to sign-in by clicking on the OAuthCard's sign-in button.

  8. Wenn der Benutzer auf die Schaltfläche zum Anmelden klickt, öffnet der Kanaldienst einen Webbrowser und ruft den externen Dienst auf, um seine Anmeldeseite zu laden.When the user clicks the sign-in button, the channel service opens a web browser and calls out to the external service to load its sign-in page.

  9. Der Benutzer meldet sich auf dieser Seite für den externen Service an.The user signs-in to this page for the external service. Danach schließt der externe Dienst OAuth-Protokollaustausch mit dem Bot Framework-Tokendienst ab, woraufhin der externe Dienst dem Bot Framework-Tokendienst das Benutzertoken sendet.Then the external service completes the OAuth protocol exchange with the Bot Framework Token Service, resulting in the external service sending the Bot Framework Token Service the user token. Der Bot Framework-Tokendienst speichert dieses Token sicher und sendet mit diesem Token eine Aktivität an den Bot.The Bot Framework Token Service securely stores this token and sends an activity to the bot with this token.

  10. Der Bot erhält die Aktivität mit dem Token und kann dieses daraufhin für Microsoft Graph-API-Aufrufe verwenden.The bot receives the activity with the token and is able to use it to make calls against the MS Graph API.

Sichern der Anmelde-URLSecuring the sign-in URL

Ein wichtiger Aspekt bei der Nutzung des Bot Framework für eine Benutzeranmeldung ist die Sicherung der Anmelde-URL.An important consideration when the Bot Framework facilitates a user login is how to secure the sign-in URL. Wenn einem Benutzer eine Anmelde-URL bereitgestellt wird, wird diese URL mit einer bestimmten Konversations-ID und Benutzer-ID für diesen Bot verknüpft.When a user is presented with a sign-in URL, this URL is associated with a specific conversation ID and user ID for that bot. Diese URL darf nicht freigegeben werden, da dies zu einer falschen Anmeldung für eine bestimmte Bot-Konversation führen würde.This URL should not be shared, as it would cause the wrong sign-in to occur for a particular bot conversation. Um Sicherheitsangriffe durch gemeinsame Nutzung der Anmelde-URL zu minimieren, muss sichergestellt werden, dass der Computer und die Person, die auf die Anmelde-URL klickt, die Person ist, die das Konversationsfenster besitzt.To mitigate security attacks regarding sharing the sign-in URL, it is necessary to ensure that the machine and person who clicks on the sign-in URL is the person who owns the conversation window.

Einige Kanäle wie Microsoft Teams, Direct Line und WebChat können dies tun, ohne dass der Benutzer dies notiert.Some channels such as Microsoft Teams, Direct Line, and WebChat are able to do this without the user noticing. So verwendet WebChat beispielsweise Sitzungscookies, um sicherzustellen, dass der Anmeldevorgang im selben Browser wie die WebChat-Konversation stattfand.For example, WebChat uses session cookies to ensure that the sign-in flow took place in the same browser as the WebChat conversation. Für andere Kanäle wird dem Benutzer jedoch oft ein 6-stelliger Magic-Befehlscode bereitgestellt.However, for other channels the user is often presented with a 6-digit magic code. Dies ist vergleichbar mit einer integrierten mehrstufigen Authentifizierung, da der Bot Framework-Tokendienst das Token erst dann an den Bot weitergibt, wenn der Benutzer die endgültige Authentifizierung abgeschlossen hat, was beweist, dass die Person, die sich angemeldet hat, durch Eingabe des 6-stelligen Codes Zugriff auf die Chatumgebung hat.This is similar to a built-in multi-factor authentication, as the Bot Framework Token Service will not release the token to the bot unless the user finishes the final authentication, proving that the person who signed-in has access to the chat experience by entering the 6-digit code.

Wichtig

Beachten Sie diese wichtigen Sicherheitsüberlegungen.Please, keep in mind these important Security considerations. Weitere Informationen finden Sie im folgenden Blogbeitrag: Verwenden von WebChat mit Azure Bot Service-Authentifizierung.You can find additional information in this blog post: Using WebChat with Azure Bot Service Authentication.

Nächste SchritteNext steps

Nachdem Sie nun über die Benutzerauthentifizierung informiert sind, werfen wir einen Blick darauf, wie Sie diese auf Ihren Bot anwenden.Now that you know about user authentication, let's take a look at how to apply that to your bot.

Weitere InformationenSee also