Erweiterte DirectLine-AuthentifizierungDirect Line enhanced authentication

gilt für: SDK v4APPLIES TO: SDK v4

In diesem Artikel werden potenzielle Sicherheitsrisiken beschrieben, wenn Benutzer eine Verbindung mit einem bot herstellen, z. b. mit dem Webbrowser -Steuerelement.This article describes potential security risks when users connect to a bot, for example using the Web Chat control. Außerdem werden Lösungen mit den Einstellungen für die Erweiterte Authentifizierung und die sichere Handhabung von Benutzer-IDs angezeigt.Also, it shows mitigating solutions using the Direct Line enhanced authentication settings and secure user ID handling.

Beachten Sie, dass es zwei Benutzer Identitäten gibt:You must be aware that there are two user identities:

  • Die Identität des Channel-Benutzers.The channel user's identity. Ein Angreifer kann ihn für denIdentitätswechsel verwenden.An attacker can use it for Impersonation.
  • Die Identität des Benutzers des Identitäts Anbieters, den der bot zum Authentifizieren des Benutzers verwendet.The user's identity from the identity provider that the bot uses to authenticate the user. Ein Angreifer kann ihn zum Spoofing von Identitätenverwenden.An attacker can use it for Identity spoofing.

IdentitätswechselImpersonation

Der Identitätswechsel bezieht sich auf die Aktion eines Angreifers, der den bot meint, dass er eine andere Person ist.Impersonation refers to the action of an attacker that makes the bot think he is someone else. Im Webchat kann der Angreifer beispielsweise die Identität einer anderen Person durch Ändern der Benutzer-ID der Webchat Instanz annehmen.For example, in Web Chat, the attacker can impersonate someone else by changing the user ID of the Web Chat instance.

Minderung von IdentitätswechselImpersonation mitigation

  • Legen Sie die Benutzer-ID als nicht zulässig fest.Make the user ID unguessable.

  • Verbinden Sie einen bot mit direkter Zeile.Connect a bot to Direct Line.

  • Aktivieren Sie die Erweiterte Authentifizierungs Option für den direktline-Channel, damit das Azure bot Service jede Änderung der Benutzer-ID besser erkennen und ablehnen kann.Enable the Direct Line channel's enhanced authentication option to allow the Azure Bot Service to further detect and reject any user ID change. Dies bedeutet, dass die Benutzer-ID ( Activity.From.Id ) für Nachrichten von direkter Zeile zum bot immer identisch mit der ID ist, die Sie zum Initialisieren des Webchat-Steuer Elements verwendet haben.This means the user ID (Activity.From.Id) on messages from Direct Line to the bot will always be the same as the one you used to initialize the Web Chat control.

    Hinweis

    Direct Line erstellt ein Token auf Grundlage des direkten geheimen Schlüssels und bettet die User.ID in das Token ein.Direct Line creates a token based on the Direct Line secret and embeds the User.Id in the token. Dadurch wird sichergestellt, dass die an den bot gesendeten Nachrichten diese User.ID als from.ID der Aktivität enthalten. Wenn ein Client eine Nachricht an eine direkte Zeile mit einer anderen from.ID sendet, wird Sie in die ID geändert, die im Token eingebettet ist, bevor die Nachricht an den bot weitergeleitet wird.It assures that the messages sent to the bot have that User.Id as the activity's From.Id. If a client sends a message to Direct Line having a different From.Id, it will be changed to the Id embedded in the token before forwarding the message to the bot. Daher können Sie keine andere Benutzer-ID verwenden, nachdem ein channelgeheimnis mit dieser ID initialisiert wurde.So you cannot use another user ID after a channel secret is initialized with that ID.

    Diese Funktion erfordert, dass die Benutzer-ID dl_ wie unten dargestellt mit beginnt:This feature requires the user ID to start with dl_ as shown below:

    public class HomeController : Controller
    {
        private const string secret = "<TODO: DirectLine secret>";
        private const string dlUrl = "https://directline.botframework.com/v3/directline/tokens/generate";
    
        public async Task<ActionResult> Index()
        {
            HttpClient client = new HttpClient();
            var userId = $"dl_{Guid.NewGuid()}";
    
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, dlUrl);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
            request.Content = new StringContent(
                JsonConvert.SerializeObject(
                    new { User = new { Id = userId } }),
                    Encoding.UTF8,
                    "application/json");
    
            var response = await client.SendAsync(request);
    
            string token = String.Empty;
            if (response.IsSuccessStatusCode)
            {
                var body = await response.Content.ReadAsStringAsync();
                token = JsonConvert.DeserializeObject<DirectLineToken>(body).token;
            }
    
            var config = new ChatConfig()
            {
                Token = token,
                UserId = userId
            };
    
            return View(config);
        }
    }    
    
    

    Das generierte Token, das auf dem direkten geheimen Schlüssel basiert, wird dann wie unten dargestellt im Webchat-Steuerelement verwendet:The generated token, based on the Direct Line secret, is then used in the Web Chat control as shown below:

    @model Bot_Auth_DL_Secure_Site_MVC.Models.ChatConfig
    @{
        ViewData["Title"] = "Home Page";
    }
    <div id="webchat" role="main" />
    <head>
        <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
    </head>
    <body>
        <script>
          window.WebChat.renderWebChat({
              directLine: window.WebChat.createDirectLine({ token: '@Model.Token' }),
                userID: '@Model.UserId'
          }, document.getElementById('webchat'));
        </script>
    </body>
    
    

Identitäts SpoofingIdentity spoofing

Das Identitäts Spoofing bezieht sich auf die Aktion eines Angreifers, der die Identität eines berechtigten Benutzers annimmt und dann diese Identität verwendet, um ein schädliches Ziel zu erreichen.Identity spoofing refers to the action of an attacker that assumes the identity of a legitimate user and then uses that identity to accomplish a malicious goal.

Wenn ein bot den channelbenutzer a auffordert, sich bei einem Identitäts Anbieter anzumelden, muss der Anmeldevorgang sicherstellen, dass Benutzer a der einzige Anmeldevorgang ist, der sich bei dem Anbieter anmeldet.When a bot asks the channel user A to sign-in to an identity provider, the sign-in process must assure that user A is the only one that signs into the provider. Wenn ein anderer Benutzer auch den Anbieter anmelden darf, kann er über den bot auf Benutzerressourcen zugreifen.If another user is also allowed to sign-in the provider, they would have access to user A resources through the bot.

Entschärfung der Benutzeridentitäts-SpoofingUser identity spoofing mitigation

Im Webchat-Steuerelement gibt es zwei Mechanismen, um sicherzustellen, dass der richtige Benutzer angemeldet ist.In the Web Chat control, there are two mechanisms to assure that the proper user is signed in.

  1. Magic-Code.Magic code. Am Ende des Anmeldevorgangs wird dem Benutzer ein zufällig generierter, 6-stelliger Code angezeigt (Magic Code).At the end of the sign-in process, the user is presented with a randomly generated 6-digit code (magic code). Der Benutzer muss diesen Code in die Konversation eingeben, um den Anmeldevorgang abzuschließen.The user must type this code in the conversation to complete the sign-in process. Dies führt in der Regel zu einem ungültigen Benutzer.This tends to result in a bad user's experience. Zudem ist er nach wie vor anfällig für Phishing-Angriffe.Additionally, it is still susceptible to phishing attacks. Ein böswilliger Benutzer kann einen anderen Benutzer dazu bringen, sich anzumelden und den magischen Code durch Phishing erhalten.A malicious user can trick another user to sign-in and obtain the magic code through phishing.

    Warnung

    Die Verwendung des magischen Codes wurde als veraltet markiert.The use of the magic code has been deprecated. Stattdessen wird empfohlen, den weiter unten beschriebenen Ansatz für die Erweiterte Direct Line-Authentifizierung zu verwenden.Instead, it's recommended to use the Direct Line enhanced authentication approach, described below.

  2. Erweiterte DirectLine-Authentifizierung.Direct Line enhanced authentication. Aufgrund der Probleme mit dem Magic-Code Ansatz hat Azure bot Service seinen Bedarf entfernt.Because of the issues with the magic code approach, Azure Bot Service removed its need. Azure Bot Service garantiert, dass der Anmeldevorgang nur in derselben Browsersitzung durchgeführt werden kann, in der sich auch die Web Chat-Instanz befindet.Azure Bot Service guarantees that the sign-in process can only be completed in the same browser session as the Web Chat itself. Um diesen Schutz zu aktivieren, müssen Sie den Webchat mit einem direkten Zeilen Token starten, das eine Liste vertrauenswürdiger Domänen enthält, die den Webchat Client des Bots hosten können.To enable this protection, you must start Web Chat with a Direct Line token that contains a list of trusted domains that can host the bot's Web Chat client. Mit erweiterten Authentifizierungs Optionen können Sie die Liste vertrauenswürdiger Domänen (vertrauenswürdige Ursprünge) auf der Seite für die direkte Zeilen Konfiguration statisch angeben.With enhanced authentication options, you can statically specify the trusted domains (trusted origins) list in the Direct Line configuration page. Weitere Informationen finden Sie im Abschnitt configure Enhanced Authentication .See Configure enhanced authentication section.