Hinzufügen von Authentifizierung zu einem BotAdd authentication to a bot

gilt für: SDK v4APPLIES TO: SDK v4

Das Azure Bot Service v4 SDK erleichtert die Entwicklung von Bots, die auf Onlineressourcen zugreifen können, die eine Benutzerauthentifizierung erfordern.The Azure Bot Service v4 SDK facilitates the development of bots that can access online resources that require user authentication. Ihr Bot muss keine Authentifizierungstoken verwalten, da Azure dies für Sie mit OAuth 2.0 übernimmt, um ein Token basierend auf den Anmeldeinformationen jedes Benutzers zu generieren.Your bot does not need to manage authentication tokens because Azure does it for you using OAuth 2.0 to generate a token based on each user's credentials. Ihr Bot verwendet das von Azure generierte Token für den Ressourcenzugriff.Your bot uses the token generated by Azure to access those resources. Dadurch muss der Benutzer seine ID und sein Kennwort für den Zugriff auf eine geschützte Ressource nicht im Bot, sondern nur bei einem vertrauenswürdigen Identitätsanbieter angeben.In this way, the user does not have to provide ID and password to the bot to access a secured resource but only to a trusted identity provider.

Eine Übersicht darüber, wie die Bot Framework art der Authentifizierung behandelt, finden Sie unter Benutzerauthentifizierung.For an overview of how the Bot Framework handles this kind of authentication, see User authentication.

Hinweis

Die Authentifizierung funktioniert auch mit Bot Builder v3.Authentication also works with BotBuilder v3. In diesem Artikel wird allerdings nur der Beispielcode der Version 4 behandelt.However, this article covers just the v4 sample code.

Dieser Artikel enthält zwei Beispiele.This article references two samples. Das eine zeigt das Beziehen eines Authentifizierungstokens.One shows how to obtain an authentication token. Die andere ist komplexer und zeigt, wie Sie im Namen Graph Microsoft-Website zugreifen können.The other is more complex and shows how to access Microsoft Graph on behalf of the user. In beiden Fällen können Sie Azure Active Directory (AD) v1 oder Azure AD v2 als Identitätsanbieter verwenden, um ein OAuth-Token für den Bot zu beziehen.In both cases you can use Azure Active Directory (AD) v1 or Azure AD v2 as an identity provider to obtain an OAuth token for the bot. In diesem Artikel wird Folgendes behandelt:This article covers how to:

Am Ende dieses Artikels verfügen Sie über einen Bot, der auf einige einfache Aufgaben reagieren kann.Once you finish this article, you will have a bot that can respond to a few simple tasks. Im Fall des Microsoft Graph-Beispiels können Sie eine E-Mail senden, anzeigen, wer Sie sind, und die aktuellsten E-Mail-Nachrichten überprüfen.In the case of the Microsoft Graph example, you can send an email, display who you are, and check recent emails. Sie müssen den Bot zwar nicht veröffentlichen, um die OAuth-Features zu testen, der Bot benötigt jedoch eine gültige Azure-App-ID und ein entsprechendes Kennwort.You do not need to publish the bot to test the OAuth features; however, the bot will need valid Azure app ID and password.

Überlegungen zu Web Chat und Direct LineWeb Chat and Direct Line considerations

Wichtig

Sie müssen Direct Line mit aktivierter erweiterter Authentifizierung verwenden, um Sicherheitsrisiken beim Herstellen einer Verbindung mit einem Bot mithilfe der Webchat verringern.You need to use Direct Line with enhanced authentication enabled to mitigate security risks when connecting to a bot using the Web Chat control. Weitere Informationen finden Sie unter Direct Line der erweiterten Authentifizierung.For more information, see Direct Line enhanced authentication.

VoraussetzungenPrerequisites

BeispielSample BotBuilder-VersionBotBuilder version ZeigtDemonstrates
Authentifizierung in C# oder JavaScript oder Java oder PythonAuthentication in C# or JavaScript or Java or Python v4v4 OAuthCard-UnterstützungOAuthCard support
Authentifizierungs-MSGraph in C# oder JavaScript oder Java oder PythonAuthentication MSGraph in C# or JavaScript or Java or Python v4v4 Microsoft Graph-API-Unterstützung mit OAuth 2Microsoft Graph API support with OAuth 2

Über die BeispieleAbout the samples

Für die Beispiele in diesem Artikel benötigen Sie Folgendes:To run the samples referenced in this article, you need the following:

  1. Eine Azure AD-Anwendung (Active Directory) zum Registrieren einer Botressource in Azure.An Azure Active Directory (AD) application to register a bot resource in Azure. Diese Anwendung ermöglicht es dem Bot, auf eine externe geschützte Ressource zuzugreifen (etwa auf Microsoft Graph).This application allows the bot to access an external secured resource, such as Microsoft Graph. Außerdem kann der Benutzer dank der Anwendung über verschiedene Kanäle (beispielsweise Webchat) mit dem Bot kommunizieren.It also allows the user to communicate with the bot via several channels such as Web Chat.
  2. Eine separate Azure AD-Anwendung, die als Identitätsanbieter fungiert.A separate Azure AD application that functions as the identity provider. Diese Anwendung stellt die Anmeldeinformationen bereit, die zum Herstellen einer OAuth-Verbindung zwischen dem Bot und der geschützten Ressource erforderlich sind.This application provides the credentials needed to establish an OAuth connection between the bot and the secured resource. In diesem Artikel wird Active Directory als Identitätsanbieter verwendet.Notice that this article uses Active Directory as an identity provider. Es werden aber auch zahlreiche andere Anbieter unterstützt.Many other providers are also supported.

Wichtig

Wenn Sie einen Bot in Azure registrieren, wird ihm eine Azure AD-Anwendung zugewiesen.Whenever you register a bot in Azure, it gets assigned an Azure AD application. Diese Anwendung schützt jedoch den Zugriff auf den Bot über den Kanal.However, this application secures channel-to-bot access. Für externe geschützte Ressourcen, auf die der Bot im Namen des Benutzers zugreifen soll, wird jeweils eine zusätzliche Azure AD-Anwendung benötigt.You need an additional Azure AD application for each external secured resource you want the bot to access on behalf of the user.

Erstellen der RessourceCreate the resource

Erstellen Sie die Azure Bot-Ressource, mit der Sie Ihren Bot bei der Azure Bot Service.Create the Azure Bot resource, which will allow you to register your bot with the Azure Bot Service.

Warnung

Die Registrierung von Web-App-Bots und Botkanälen ist veraltet, vorhandene Ressourcen funktionieren jedoch weiterhin. Web App Bot and Bot Channels Registration will be deprecated but existing resources will continue to work. Stattdessen sollten Sie den Azure-Bot verwenden.You should use Azure Bot, instead.

  1. Öffnen Sie das Azure-Portal.Go to the Azure portal.

  2. Wählen Sie im rechten Bereich Ressource erstellen aus.In the right pane, select Create a resource.

  3. Geben Sie im Suchfeld bot ein, und drücken Sie dann die EINGABETASTE.In the search box enter bot, then press Enter.

  4. Wählen Sie die Azure Bot-Karte aus.Select the Azure Bot card.

    Auswählen der Azure-Botressource

  5. Klicken Sie auf Erstellen.Select Create.

    Erstellen einer Azure Bot-Ressource

  6. Geben Sie die erforderlichen Werte ein.Enter the required values. Die folgende Abbildung zeigt die ausgewählte Option Create new Microsoft App ID (Neue Microsoft-App-ID erstellen).The following figure shows Create new Microsoft App ID selected.

    Erstellen von Azure Bot-Ressourcenwerten

    Sie können auch Vorhandene App-Registrierung verwenden auswählen und Ihre vorhandene App-ID und ihr Kennwort eingeben.You can also select Use existing app registration and enter your existing app Id and password.

    Erstellen vorhandener Werte für eine Azure Bot-Ressource

  7. Klicken Sie auf Überprüfen + erstellen.Select Review + create.

  8. Wenn die Überprüfung erfolgreich ist, wählen Sie Erstellen aus.If the validation passes, select Create.

  9. Wählen Sie Zu Ressourcengruppe wechseln aus.Select Go to resource group. Der Bot und die zugehörigen Ressourcen Azure Key Vault in der ausgewählten Ressourcengruppe aufgeführt.You should see the bot and the related Azure Key Vault resources listed in the resource group you selected.

    Tipp

    Das App-Geheimnis (Kennwort) wird im Schlüsseltresor gespeichert, und es gibt einen Schlüsseltresor pro Ressourcengruppe.The app secret (password) is stored in the the key vault and there is one key vault per resource group. Die Verwendung des Schlüsseltresors wird empfohlen, anstatt vertrauliche Daten zu kopieren und zu speichern.Using key vault is recommended instead of copying and storing sensitive data.

  10. Wählen Sie Get the SDK from Github (SDK von GitHub herunterladen) aus, um Ihren Bot mit dem Bot Framework SDK zu erstellen.Select Get the SDK from Github to build your bot with the Bot Framework SDK.

    Erstellen eines Bots im SDK

Azure-SchlüsseltresorAzure Key Vault

Wenn Azure die Azure Bot-Ressource erstellt, generiert es auch eine App-ID und ein Kennwort und speichert das Kennwort in Azure Key Vault.When Azure creates the Azure Bot resource, it also generates an app Id and a password and stores the password in Azure Key Vault.

Key Vault ist ein Dienst, der eine zentralisierte Verwaltung von Geheimnissen mit vollständiger Kontrolle über Zugriffsrichtlinien und den Überwachungsverlauf bietet.Key Vault is a service that provides centralized secrets management, with full control over access policies and audit history. Weitere Informationen erhalten Sie unter Verwenden von Key Vault-Verweisen in App Service und Azure Functions.For more information, see Use Key Vault references for App Service and Azure Functions. Beachten Sie, dass Ihnen eine kleine Gebühr für die Nutzung des Diensts in Rechnung gestellt wird.Note that you will be charged a small fee for using the service. Weitere Informationen finden Sie auf der Seite Key Vault – Preise.For more information, see Key Vault pricing.

App-ID und KennwortApp Id and password

Sie benötigen die Azure Bot-Ressourcen-App-ID und das Kennwort, um Ihren Bot für die Bereitstellung zu konfigurieren.You need the Azure bot resource app Id and password to configure your bot for deployment. Sie weisen ihre Werte den zugehörigen Variablen zu: MicrosoftAppId und sind in Ihrer MicrosoftAppPassword Botprojektkonfigurationsdatei enthalten.You will assign their values to the related variables: MicrosoftAppId and MicrosoftAppPassword contained in your bot project configuration file. Die Datei unterscheidet sich abhängig von der Programmiersprache, die Sie zum Erstellen des Bots verwenden, wie unten dargestellt.The file differs depending on the programming language you use to create the bot, as shown below.

Die appsettings.json Datei enthält die folgenden Einstellungen:The appsettings.json file contains these settings:

{
  "MicrosoftAppId": "<your app id>",
  "MicrosoftAppPassword": "<your password>"
}

Abrufen der App-ID der Azure-BotressourceGet Azure bot resource app Id

  1. Öffnen Sie das Azure-Portal.Go to the Azure portal.
  2. Wählen Sie die Azure-Botressource aus, um ihre App-ID abzurufen.Select the Azure bot resource to obtain its app Id.
  3. Wählen Sie im linken Bereich im Abschnitt Einstellungen die Option Konfiguration aus.In the left pane, in the Settings section, select Configuration.
  4. Kopieren und speichern Sie den Im Feld Microsoft-App-ID enthaltenen Wert.Copy and save the value contained in the Microsoft App ID box.

Abrufen des Azure Bot-Ressourcenkennworts aus Azure Key VaultGet Azure bot resource password from Azure Key Vault

Wenn Azure die Azure Bot-Ressource erstellt, wird das App-Kennwort in Azure Key Vault gespeichert.When Azure creates the Azure Bot resource, it stores the app password in Azure Key Vault. Informationen zum Zugreifen auf den Schlüsseltresor zum Abrufen Ihres Kennworts finden Sie unter:For information on how to access the key vault to obtain your password, see:

Azure AD-IdentitätsdienstAzure AD identity service

Azure Active Directory (Azure AD) ist ein Cloudidentitätsdienst, der die Erstellung von Anwendungen mit sicherer Benutzeranmeldung über branchenübliche Protokolle wie OAuth 2.0 ermöglicht.The Azure Active Directory (Azure AD) is a cloud identity service that allows you to build applications that securely sign in users using industry standard protocols like OAuth2.0.

Sie können einen der beiden folgenden Identitätsdienste verwenden:You can use one of these two identity services:

  1. Azure AD-Entwicklerplattform (v1.0) –Azure AD developer platform (v1.0). auch bekannt als Endpunkt Azure AD v1. Ermöglicht das Erstellen von Apps mit sicherer Anmeldung von Benutzern, die über ein Geschäfts-, Schul- oder Unikonto von Microsoft verfügen.Also known as the Azure AD v1 endpoint, which allows you to build apps that securely sign in users with a Microsoft work or school account. Weitere Informationen finden Sie unter Azure Active Directory für Entwickler (v1.0) – Übersicht.For more information, see the Azure Active Directory for developers (v1.0) overview.
  2. Microsoft Identity Platform (v2.0) –Microsoft identity platform (v2.0). auch bekannt als Endpunkt Azure AD v2. Hierbei handelt es sich um eine Weiterentwicklung der Azure AD-Plattform (v1.0).Also known as the Azure AD v2 endpoint, which is an evolution of the Azure AD platform (v1.0). Ermöglicht das Erstellen von Anwendungen, di sich bei allen Microsoft-Identitätsanbietern anmelden und Token abrufen, um Microsoft-APIs (beispielweise Microsoft Graph) oder andere, von Entwicklern erstellte APIs aufzurufen.It allows you to build applications that sign in to all Microsoft identity providers and get tokens to call Microsoft APIs, such as Microsoft Graph, or other APIs that developers have built. Weitere Informationen finden Sie in der Übersicht über Microsoft Identity Platform (v2.0).For more information, see the Microsoft identity platform (v2.0) overview,

Informationen zu den Unterschieden zwischen den Endpunkten der Versionen 1 und 2 finden Sie unter Gründe für eine Aktualisierung auf die Microsoft Identity Platform (v2.0).For information about the differences between the v1 and v2 endpoints, see Why update to Microsoft identity platform (v2.0)?. Umfassende Informationen finden Sie in der Dokumentation zur Microsoft Identity Platform.For complete information, see Microsoft identity platform (formerly Azure Active Directory for developers).

Erstellen des Azure AD IdentitätsanbietersCreate the Azure AD identity provider

In diesem Abschnitt wird gezeigt, wie Sie einen Azure AD erstellen, der OAuth2 zum Authentifizieren des Bots verwendet.This section shows how to create an Azure AD identity provider that uses OAuth2 to authenticate the bot. Sie können Azure AD-Endpunkte der Version 1 oder 2 verwenden.You can use Azure AD v1 or Azure AD v2 endpoints.

Tipp

Sie müssen die Azure AD-Anwendung bei einem Mandanten erstellen und registrieren, in dem Sie der Delegierung der von einer Anwendung angeforderten Berechtigungen zustimmen können.You will need to create and register the Azure AD application in a tenant in which you can consent to delegate permissions requested by an application.

  1. Öffnen Sie im Azure-Portal das Panel Azure Active Directory.Open the Azure Active Directory panel in the Azure portal. Sollten Sie sich nicht im korrekten Mandanten befinden, klicken Sie auf Verzeichnis wechseln, um zum korrekten Mandanten zu wechseln.If you are not in the correct tenant, click Switch directory to switch to the correct tenant. (Eine Anleitung zum Erstellen eines Mandanten finden Sie unter Schnellstart: Erstellen eines neuen Mandanten in Azure Active Directory.)(For instruction on creating a tenant, see Access the portal and create a tenant.)

  2. Öffnen Sie den Bereich App-Registrierungen.Open the App registrations panel.

  3. Klicken Sie im Bereich App-Registrierungen auf Neue Registrierung.In the App registrations panel, click New registration.

  4. Füllen Sie die erforderlichen Felder aus, und erstellen Sie die App-Registrierung.Fill in the required fields and create the app registration.

    1. Benennen Sie Ihre Anwendung.Name your application.

    2. Wählen Sie die unterstützten Kontotypen für Ihre Anwendung aus.Select the Supported account types for your application. (Mit diesem Beispiel funktionieren alle diese Optionen.)(Any of these options will work with this sample.)

    3. Für den Umleitungs-URIFor the Redirect URI

      1. Wählen Sie Web aus.Select Web.
      2. Legen Sie die URL auf https://token.botframework.com/.auth/web/redirect fest.Set the URL to https://token.botframework.com/.auth/web/redirect.
    4. Klicken Sie auf Registrieren.Click Register.

      • Sobald sie erstellt wurde, zeigt Azure die Seite Übersicht für die App an.Once it is created, Azure displays the Overview page for the app.
      • Notieren Sie sich den Wert der Anwendungs-ID (Client) .Record the Application (client) ID value. Sie verwenden diesen Wert später als Client-ID, wenn Sie die Verbindungszeichenfolge erstellen und den Azure AD bei der Botregistrierung registrieren.You will use this value later as the Client id when you create the connection string and register the Azure AD provider with the bot registration.
      • Notieren Sie auch den Wert der Verzeichnis-ID (Mandant) .Also record the Directory (tenant) ID value. Sie verwenden dies auch, um diese Anbieteranwendung bei Ihrem Bot zu registrieren.You will also use this to register this provider application with your bot.
  5. Klicken Sie im Navigationsbereich auf Zertifikate und Geheimnisse, um ein Geheimnis für Ihre Anwendung zu erstellen.In the navigation pane, click Certificates & secrets to create a secret for your application.

    1. Klicken Sie unter Geheime Clientschlüssel auf Neuer geheimer Clientschlüssel.Under Client secrets, click New client secret.
    2. Fügen Sie eine Beschreibung hinzu, um dieses Geheimnis von anderen zu unterscheiden, die Sie für diese App erstellen müssen, z. B. bot login.Add a description to identify this secret from others you might need to create for this app, such as bot login.
    3. Legen Sie Läuft ab auf Nie fest.Set Expires to Never.
    4. Klicken Sie auf Hinzufügen.Click Add.
    5. Notieren Sie das Geheimnis vor dem Verlassen dieser Seite.Before leaving this page, record the secret. Dieser Wert wird später als Clientgeheimnis verwendet, wenn Sie Ihre Azure AD-Anwendung mit Ihrem Bot registrieren.You will use this value later as the Client secret when you register your Azure AD application with your bot.
  6. Klicken Sie im Navigationsbereich auf API-Berechtigungen, um den Bereich API-Berechtigungen zu öffnen.In the navigation pane, click API permissions to open the API permissions panel. Dies ist eine bewährte Methode, um die API-Berechtigungen für die App explizit festzulegen.It is a best practice to explicitly set the API permissions for the app.

    1. Klicken Sie auf Berechtigung hinzufügen, um den Bereich API-Berechtigungen anfordern anzuzeigen.Click Add a permission to show the Request API permissions pane.

    2. Wählen Sie für dieses Beispiel Microsoft-APIs und Microsoft Graph aus.For this sample, select Microsoft APIs and Microsoft Graph.

    3. Wählen Sie Delegierte Berechtigungen aus, und stellen Sie sicher, dass die benötigten Berechtigungen ausgewählt sind.Choose Delegated permissions and make sure the permissions you need are selected. Dieses Beispiel erfordert diese Berechtigungen.This sample requires theses permissions.

      Hinweis

      Für Berechtigungen, die mit ADMINISTRATOREINWILLIGUNG ERFORDERLICH gekennzeichnet sind, müssen sich sowohl ein Benutzer als auch ein Mandantenadministrator anmelden, also sollten Sie diese für Ihren Bot vermeiden.Any permission marked as ADMIN CONSENT REQUIRED will require both a user and a tenant admin to login, so for your bot tend to stay away from these.

      • openidopenid
      • profileprofile
      • Mail.ReadMail.Read
      • Mail.SendMail.Send
      • User.ReadUser.Read
      • User.ReadBasic.AllUser.ReadBasic.All
    4. Klicken Sie a Berechtigungen hinzufügen.Click Add permissions. (Wenn ein Benutzer zum ersten Mal über den Bot auf diese App zugreift, muss er die Einwilligung erteilen.)(The first time a user accesses this app through the bot, they will need to grant consent.)

Sie haben jetzt eine Azure AD-Anwendung konfiguriert.You now have an Azure AD application configured.

Hinweis

Sie weisen die Anwendungs-ID (Client) und den geheimen Clientgeheimnis zu, wenn Sie die Verbindungszeichenfolge erstellen und den Identitätsanbieter bei der Botregistrierung registrieren.You will assign the Application (client) ID and the Client secret, when you create the connection string and register the identity provider with the bot registration. Siehe nächsten Abschnitt.See next section.

Registrieren des Azure AD-Identitätsanbieters beim BotRegister the Azure AD identity provider with the bot

Im nächsten Schritt wird die soeben erstellte Azure AD-Anwendung beim Bot registriert.The next step is to register the Azure AD application that you just created with the bot.

Azure AD v2Azure AD v2

  1. Navigieren Sie im Azure-Portal zur Seite für die Bot-Kanalregistrierung Ihres Bots.Navigate to your bot's Bot Channels Registration page on the Azure Portal.

  2. Klicken Sie auf Einstellungen.Click Settings.

  3. Klicken Sie ganz unten Auf der Seite unter OAuth-Verbindungseinstellungen auf Einstellung hinzufügen.Under OAuth Connection Settings near the bottom of the page, click Add Setting.

  4. Füllen Sie das Formular wie folgt aus:Fill in the form as follows:

    1. Name.Name. Geben Sie einen Namen für Ihre Verbindung ein.Enter a name for your connection. Diesen verwenden Sie im Code Ihres Bots.You'll use it in your bot code.

    2. Dienstanbieter.Service Provider. Wählen Azure Active Directory v2 aus.Select Azure Active Directory v2. Sobald Sie diese Option ausgewählt haben, werden Felder für Azure AD angezeigt.Once you select this, the Azure AD-specific fields will be displayed.

    3. Client-ID. Geben Sie die Anwendungs-ID (Client) ein, die Sie für Ihren Azure AD v2-Identitätsanbieter notiert haben.Client id. Enter the application (client) ID you recorded for your Azure AD v2 identity provider.

    4. Geheimer Clientgeheimnis.Client secret. Geben Sie das Geheimnis ein, das Sie für Ihren Azure AD v2-Identitätsanbieter notiert haben.Enter the secret you recorded for your Azure AD v2 identity provider.

    5. Token Exchange URL.Token Exchange URL. Lassen Sie es leer, da es nur für SSO in Azure AD v2 verwendet wird.Leave it blank because it is used for SSO in Azure AD v2 only.

    6. Mandanten-ID.Tenant ID. Geben Sie je nach unterstützten Kontotypen, die Sie beim Erstellen der Azure DD-App ausgewählt haben, die Verzeichnis-ID (Mandant) ein, die Sie zuvor für Ihre AAD-App notiert haben.Enter the directory (tenant) ID that your recorded earlier for your AAD app or common depending on the supported account types selected when you created the Azure DD app. Folgen Sie diesen Kriterien, um zu entscheiden, welcher Wert zugewiesen werden soll:To decide which value to assign follow these criteria:

      • Wenn Sie beim Erstellen der Azure AD-App Nur Konten in diesem Organisationsverzeichnis (nur Microsoft – einzelner Mandant) ausgewählt haben, geben Sie die Mandanten-ID ein, die Sie zuvor für die Azure AD-App notiert haben.When creating the Azure AD app if you selected Accounts in this organizational directory only (Microsoft only - Single tenant) enter the tenant ID you recorded earlier for the AAD app.
      • Wenn Sie aber „Konten in einem beliebigen Organisationsverzeichnis (beliebiges Azure AD-Verzeichnis – mehrinstanzenfähig)“ und „Konten in allen Organisationsverzeichnissen und persönliche Microsoft-Konten (z. B. Skype, Xbox, Outlook.com)“ oder Konten in einem beliebigen Organisationsverzeichnis (Microsoft Azure AD-Verzeichnis – mehrinstanzfähig) ausgewählt haben, müssen Sie das Wort common (gemeinsam) anstelle einer Mandanten-ID eingeben.However, if you selected Accounts in any organizational directory (Any AAD directory - Multi tenant and personal Microsoft accounts e.g. Xbox, Outlook.com) or Accounts in any organizational directory(Microsoft Azure AD directory - Multi tenant) enter the word common instead of a tenant ID. Andernfalls überprüft die AAD-App über den Mandanten, dessen ID ausgewählt wurde, und schließt persönliche MS-Konten aus.Otherwise, the AAD app will verify through the tenant whose ID was selected and exclude personal MS accounts.

      Dieser Mandant wird den Benutzern zugeordnet, die authentifiziert werden können.This will be the tenant associated with the users who can be authenticated. Weitere Informationen hierzu finden Sie unter Mandanten in Azure Active Directory.For more information, see Tenancy in Azure Active Directory.

    7. Geben Sie unter Bereiche die Namen der Berechtigung ein, die Sie in der Anwendungsregistrierung ausgewählt haben.For Scopes, enter the names of the permission you chose from the application registration. Zu Testzwecken können Sie einfach openid profile eingeben: .For testing purposes, you can just enter: openid profile.

      Hinweis

      Bei Azure AD v2 wird im Feld Bereiche eine Liste von durch Leerzeichen getrennten Werten mit Beachtung der Groß-/Kleinschreibung verwendet.For Azure AD v2, Scopes field takes a case-sensitive, space-separated list of values.

  5. Klicken Sie auf Speichern.Click Save.

Hinweis

Mit diesen Werten kann Ihre Anwendung über die Microsoft Graph-API auf Office 365-Daten zugreifen.These values enable your application to access Office 365 data via the Microsoft Graph API. Auch sollte keine URL für den Tokenaustausch angegeben werden, da sie nur für einmaliges Anmelden in Azure AD v2 verwendet wird.Also, the Token Exchange URL should be left blank because it is used for SSO in Azure AD v2 only.

Testen der VerbindungTest your connection

  1. Klicken Sie auf den Verbindungseintrag, um die soeben erstellte Verbindung zu öffnen.Click on the connection entry to open the connection you just created.
  2. Klicken Sie oben im Bereich Service Provider Connection Setting (Dienstanbieter-Verbindungseinstellung) auf Verbindung testen.Click Test Connection at the top of the Service Provider Connection Setting pane.
  3. Beim ersten Mal sollte dies eine neue Registerkarte im Browser öffnen, auf der die Berechtigungen aufgeführt werden, die die App von Ihnen anfordert.The first time, this should open a new browser tab listing the permissions your app is requesting and prompt you to accept.
  4. Klicken Sie auf Annehmen.Click Accept.
  5. Daraufhin werden Sie zur Seite mit dem Hinweis Test Connection to <your-connection-name> Succeeded (Testverbindung mit [Name Ihrer Verbindung] erfolgreich) weitergeleitet.This should then redirect you to a Test Connection to <your-connection-name> Succeeded page.

Sie können diesen Verbindungsnamen nun im Code Ihres Bots verwenden, um Benutzertoken abzurufen.You can now use this connection name in your bot code to retrieve user tokens.

Vorbereiten des BotcodesPrepare the bot code

Sie benötigen die App-ID und das Kennwort für Ihren Bot, um diesen Prozess abschließen zu können.You will need your bot's app ID and password to complete this process.

  1. Klonen Sie im GitHub-Repository das Beispiel, mit dem Sie arbeiten möchten: Botauthentifizierung oder Botauthentifizierung (MSGraph).Clone from the github repository the sample you want to work with: Bot authentication or Bot authentication MSGraph.

  2. Aktualisieren Sie appsettings.json:Update appsettings.json:

    • Legen Sie ConnectionName auf den Namen der OAuth-Verbindungseinstellung fest, die Sie Ihrem Bot hinzugefügt haben.Set ConnectionName to the name of the OAuth connection setting you added to your bot.

    • Legen Sie MicrosoftAppId und MicrosoftAppPassword auf die App-ID bzw. das App-Geheimnis Ihres Bots fest.Set MicrosoftAppId and MicrosoftAppPassword to your bot's app ID and app secret.

      Abhängig von den Zeichen in Ihrem Botgeheimnis müssen Sie das Kennwort unter Umständen mit XML-Escapezeichen versehen.Depending on the characters in your bot secret, you may need to XML escape the password. Beispielsweise müssen alle kaufmännische Und-Zeichen (&) als &amp; codiert werden.For example, any ampersands (&) will need to be encoded as &amp;.

    {
      "MicrosoftAppId": "",
      "MicrosoftAppPassword": "",
      "ConnectionName": ""
    }
    
  3. Aktualisieren Sie startup.cs:Update startup.cs:

    Um OAuth in nicht öffentlichen Azure-Clouds wie Government Cloud zu verwenden, müssen Sie der Datei den folgenden Code startup.cs hinzufügen:To use OAuth in non-public Azure clouds, like government cloud, you must add the following code in the startup.cs file:

    string uri = "https://api.botframework.azure.us";
    MicrosoftAppCredentials.TrustServiceUrl(uri);
    OAuthClientConfig.OAuthEndpoint = uri;
    

Informationen zum Abrufen der Werte für Microsoft-App-ID und Microsoft-App-Kennwort finden Sie unter Abrufen des Registrierungskennworts.To obtain the Microsoft app ID and Microsoft app password values, see Get registration password.

Hinweis

Als Nächstes können Sie den Botcode in Ihrem Azure-Abonnement veröffentlichen, indem Sie mit der rechten Maustaste auf das Projekt klicken und anschließend Veröffentlichen wählen. Dies ist für diesen Artikel aber nicht erforderlich.You could now publish this bot code to your Azure subscription (right-click on the project and choose Publish), but it is not necessary for this article. Sie müssten eine Veröffentlichungskonfiguration einrichten, die den Anwendungs- und Hostingplan verwendet, den Sie beim Konfigurieren des Bots im Azure-Portal verwendet haben.You would need to set up a publishing configuration that uses the application and hosting plan that you used when configuration the bot in the Azure portal.

Testen des Bots mithilfe der EmulatorTest the bot using the Emulator

Installieren Sie Bot Framework Emulator (sofern noch nicht geschehen).If you have not done so already, install the Bot Framework Emulator. Siehe auch Debuggen mit dem Emulator.See also Debug with the Emulator.

Damit die Botbeispielanmeldung funktioniert, müssen Sie die Emulator konfigurieren, wie unter Konfigurieren des Emulator für die Authentifizierunggezeigt.In order for the bot sample login to work you must configure the Emulator as shown in Configure the Emulator for authentication.

TestenTesting

Nach dem Konfigurieren des Authentifizierungsmechanismus können Sie die eigentlichen Botbeispieltests durchführen.After you have configured the authentication mechanism, you can perform the actual bot sample testing.

Hinweis

Sie werden aufgrund der Art und Weise der Implementierung des Botbeispiels möglicherweise aufgefordert, einen magischen Code einzugeben.You may be asked to enter a magic code, because the way the bot sample is implemented. Dieser magische Code ist Teil von RFC#7636 und wird zum Hinzufügen eines zusätzlichen Sicherheitselements verwendet.This magic code is part of the RFC#7636 and is there to add an extra security element. Durch das Entfernen des magischen Codes besteht ein höheres Sicherheitsrisiko.By removing the magic code, there is an increased security risk. Dies kann durch Direct Line mit aktivierter erweiterter Authentifizierung verringert werden.This can be mitigated using Direct Line with enhanced authentication enabled. Weitere Informationen finden Sie unter Bot Framework erweiterte Authentifizierung.For more information, see Bot Framework enhanced authentication.

  1. Führen Sie das Botbeispiel lokal auf Ihrem Computer aus.Run the bot sample locally on your machine.
  2. Starten Sie den Emulator.Start the Emulator.
  3. Sie müssen die App-ID und das Kennwort Ihres Bots angeben, wenn Sie die Verbindung mit dem Bot herstellen.You will need to provide your bot's app ID and password when you connect to the bot.
    • Die App-ID und das Kennwort können Sie aus der Azure-App-Registrierung abrufen.You get the app ID and the password from the Azure app registration. Dabei handelt es sich um die gleichen Werte, die Sie der Bot-App in der Datei appsettings.json oder .env zugewiesen haben.These are the same values you assigned to the bot app in the appsettings.json or .env file. Im Emulator weisen Sie diese Werte in der Konfigurationsdatei oder beim ersten Herstellen einer Verbindung mit dem Bot zu.In the Emulator, you assign these values in the configuration file or the first time you connect to the bot.
    • Wenn Sie das Kennwort in Ihrem Botcode mit XML-Escapezeichen versehen mussten, müssen Sie dies auch hier tun.If you needed to XML-escape the password in your bot code, you also need to do so here.
  4. Geben Sie help ein, um eine Liste der verfügbaren Befehle für den Bot anzuzeigen und die Authentifizierungsfeatures zu testen.Type help to see a list of available commands for the bot, and test the authentication features.
  5. Sobald Sie sich angemeldet haben, müssen Sie Ihre Anmeldeinformationen nur neu eingeben, wenn Sie sich abgemeldet haben.Once you've signed in, you don't need to provide your credentials again until you sign out.
  6. Geben Sie logout ein, um sich abzumelden und die Authentifizierung abzubrechen.To sign out, and cancel your authentication, type logout.

Hinweis

Für die Bot-Authentifizierung ist die Verwendung des Bot Connector-Diensts erforderlich.Bot authentication requires use of the Bot Connector Service. Der Dienst greift auf die Botkanal-Registrierungsinformationen für Ihren Bot zu.The service accesses the bot channels registration information for your bot.

AuthentifizierungsbeispielAuthentication example

Im Beispiel Botauthentifizierung ist der Dialog so aufgebaut, dass das Benutzertoken abgerufen wird, nachdem sich der Benutzer angemeldet hat.In the Bot authentication sample, the dialog is designed to retrieve the user token after the user is logged in.

Testimage des Authentifizierungsbots

MsGraph-AuthentifizierungsbeispielAuthentication MSGraph example

Im Beispiel Botauthentifizierung MSGraph ist der Dialog so aufgebaut, das nach dem Anmelden des Benutzers nur ein eingeschränkter Satz an Befehlen akzeptiert wird.In the Bot authentication MSGraph sample, the dialog is designed to accept a limited set of commands after the user is logged in.

Msgraph-Bot – Testbild


Zusätzliche InformationenAdditional information

Wenn ein Benutzer den Bot zu einem Vorgang auffordert, für den der Benutzer angemeldet sein muss, kann der Bot ein OAuthPrompt-Element verwenden, um das Abrufen eines Tokens für eine bestimmte Verbindung zu initiieren.When a user asks the bot to do something that requires the bot to have the user logged in, the bot can use an OAuthPrompt to initiate retrieving a token for a given connection. Mit OAuthPrompt wird ein Fluss für den Tokenabruf mit folgenden Elementen erstellt:The OAuthPrompt creates a token retrieval flow that consists of:

  1. Es wird überprüft, ob Azure Bot Service bereits über ein Token für den aktuellen Benutzer und die Verbindung verfügt.Checking to see if the Azure Bot Service already has a token for the current user and connection. Wenn ja, wird das Token zurückgegeben.If there is a token, the token is returned.
  2. Falls für Azure Bot Service noch kein zwischengespeichertes Token vorhanden ist, wird ein OAuthCard-Element erstellt. Hierbei handelt es sich um eine Schaltfläche, auf die der Benutzer klicken kann.If Azure Bot Service does not have a cached token, an OAuthCard is created which is a sign in button the user can click on.
  3. Nachdem der Benutzer auf die OAuthCard-Anmeldeschaltfläche geklickt hat, sendet Azure Bot Service das Token des Benutzers entweder direkt an den Bot oder zeigt einen sechsstelligen Authentifizierungscode für den Benutzer an, der im Chatfenster eingegeben werden muss.After the user clicks on the OAuthCard sign in button, Azure Bot Service will either send the bot the user's token directly or will present the user with a 6-digit authentication code to enter in the chat window.
  4. Wenn für den Benutzer ein Authentifizierungscode angezeigt wird, tauscht der Bot diesen Authentifizierungscode gegen das Token des Benutzers aus.If the user is presented with an authentication code, the bot then exchanges this authentication code for the user's token.

In den folgenden Abschnitten wird beschrieben, wie im Beispiel einige allgemeine Authentifizierungsaufgaben implementiert werden.The following sections describe how the sample implements some common authentication tasks.

Nutzen einer OAuth-Eingabeaufforderung zum Anmelden des Benutzers und Abrufen eines TokensUse an OAuth prompt to sign the user in and get a token

csharp-Architekturbild

Dialogs\MainDialog.csDialogs\MainDialog.cs

Fügen Sie dem MainDialog-Element im Konstruktor eine OAuth-Eingabeaufforderung hinzu.Add an OAuth prompt to MainDialog in its constructor. Hier wurde der Wert für den Verbindungsnamen aus der Datei appsettings.json abgerufen.Here, the value for the connection name was retrieved from the appsettings.json file.

AddDialog(new OAuthPrompt(
    nameof(OAuthPrompt),
    new OAuthPromptSettings
    {
        ConnectionName = ConnectionName,
        Text = "Please Sign In",
        Title = "Sign In",
        Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
    }));

Verwenden Sie innerhalb eines Dialogschritts BeginDialogAsync, um die OAuth-Eingabeaufforderung zu starten, mit der der Benutzer zum Anmelden aufgefordert wird.Within a dialog step, use BeginDialogAsync to start the OAuth prompt, which asks the user to sign in.

  • Wenn der Benutzer bereits angemeldet ist, wird ein Tokenantwortereignis generiert, ohne dass der Benutzer eine Aufforderung erhält.If the user is already signed in, this will generate a token response event, without prompting the user.
  • Andernfalls wird der Benutzer zum Anmelden aufgefordert.Otherwise, this will prompt the user to sign in. Azure Bot Service sendet das Tokenantwortereignis, nachdem der Benutzer versucht hat, sich anzumelden.The Azure Bot Service sends the token response event after the user attempts to sign in.
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);

Überprüfen Sie im folgenden Dialogschritt, ob im Ergebnis des vorherigen Schritts ein Token enthalten ist.Within the following dialog step, check for the presence of a token in the result from the previous step. Wenn es nicht NULL lautet, war die Anmeldung des Benutzers erfolgreich.If it is not null, the user successfully signed in.

// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;

Warten auf TokenResponseEventWait for a TokenResponseEvent

Wenn Sie eine OAuth-Eingabeaufforderung starten, wird auf ein Tokenantwortereignis gewartet, aus dem das Token des Benutzers abgerufen wird.When you start an OAuth prompt, it waits for a token response event, from which it will retrieve the user's token.

Bots\AuthBot.csBots\AuthBot.cs

AuthBot wird von ActivityHandler abgeleitet und führt eine explizite Verarbeitung von Tokenantwortereignis-Aktivitäten durch.AuthBot derives from ActivityHandler and explicitly handles token response event activities. Hier setzen wir den aktiven Dialog fort, sodass die OAuth-Eingabeaufforderung das Ereignis verarbeiten und das Token abrufen kann.Here, we continue the active dialog, which allows the OAuth prompt to process the event and retrieve the token.

protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Token Response Event Activity.");

    // Run the Dialog with the new Token Response Event Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Abmelden des BenutzersLog the user out

Die bewährte Methode besteht darin, Benutzern das explizite Abmelden zu ermöglichen, anstatt nur den Timeout der Verbindung zu verwenden.It is best practice to let users explicitly sign out or logout, instead of relying on the connection to time out.

Dialogs\LogoutDialog.csDialogs\LogoutDialog.cs

private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (innerDc.Context.Activity.Type == ActivityTypes.Message)
    {
        var text = innerDc.Context.Activity.Text.ToLowerInvariant();

        if (text == "logout")
        {
            // The UserTokenClient encapsulates the authentication processes.
            var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
            await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);

            await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
            return await innerDc.CancelAllDialogsAsync(cancellationToken);
        }
    }

    return null;
}

Hinzufügen einer Teams-AuthentifizierungAdding Teams Authentication

Teams verhält sich im Hinblick auf OAuth etwas anders als andere Kanäle. Für eine ordnungsgemäße Implementierung der Authentifizierung sind daher ein paar Änderungen erforderlich.Teams behaves somewhat differently than other channels in regards to OAuth and requires a few changes to properly implement authentication. Wir fügen Code aus dem Beispiel Teams Authentication Bot (C# / JavaScriptJava ) / hinzu.We will add code from the Teams Authentication Bot sample (C#/JavaScript/Java).

Einer der Unterschiede zwischen anderen Kanälen und Teams besteht darin, dass Teams anstelle einer Aktivität vom Typ Ereignis eine Aktivität vom Typ Aufrufen an den Bot sendet.One difference between other channels and Teams is that Teams sends an invoke activity to the bot, rather than an event activity.

Bots/TeamsBot.csBots/TeamsBot.cs

protected override async Task OnTeamsSigninVerifyStateAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with signin/verifystate from an Invoke Activity.");

    // The OAuth Prompt needs to see the Invoke Activity in order to complete the login process.

    // Run the Dialog with the new Invoke Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

Bei Verwendung einer OAuth-Eingabeaufforderung muss diese Aufrufaktivität an den Dialog weitergeleitet werden.If you use an OAuth prompt, this invoke activity must be forwarded to the dialog. Diesen Schritt führen wir in TeamsActivityHandler aus.We will do so in the TeamsActivityHandler. Fügen Sie Ihrer Hauptdialogdatei den folgenden Code hinzu:Add the following code to your main dialog file.

Bots/DialogBot.csBots/DialogBot.cs

public class DialogBot<T> : TeamsActivityHandler where T : Dialog

Fügen Sie abschließend eine geeignete Datei vom Typ TeamsActivityHandler (TeamsActivityHandler.cs für C#-Bots, teamsActivityHandler.js für JavaScript-Bots) auf der obersten Ebene Ihres Botordners hinzu.Finally, make sure to add an appropriate TeamsActivityHandler file (TeamsActivityHandler.cs for C# bots and teamsActivityHandler.js for Javascript bots) at the topmost level in your bot's folder.

TeamsActivityHandler sendet auch Aktivitäten vom Typ Nachrichtenantwort.The TeamsActivityHandler also sends message reaction activities. Eine Nachrichtenantwortaktivität verweist unter Verwendung des Felds Antworten-an-ID auf die ursprüngliche Aktivität.A message reaction activity references the original activity using the reply to ID field. Diese Aktivität sollte auch im Aktivitätsfeed in Microsoft Teams sichtbar sein.This activity should also be visible through the Activity Feed in Microsoft Teams.

Hinweis

Sie müssen ein Manifest erstellen und token.botframework.com in den Abschnitt validDomains einschließen. Andernfalls kann das Authentifizierungsfenster nicht über die OAuthCard-Schaltfläche Anmelden geöffnet werden.You need to create a manifest and include token.botframework.com in the validDomains section; otherwise the OAuthCard Sign in button will not open the authentication window. Generieren Sie Ihr Manifest mithilfe von App Studio.Use the App Studio to generate your manifest.

Weitere InformationsquellenFurther reading