Erweiterte Direct Line-Authentifizierung

GILT FÜR: SDK v4

In diesem Artikel werden potenzielle Sicherheitsrisiken beschrieben, wenn Benutzer eine Verbindung mit einem Bot herstellen, z. B. mithilfe des Webchat-Steuerelements. Außerdem werden lösungen mit erweiterten Direct Line-Authentifizierungseinstellungen und der sicheren Benutzer-ID-Behandlung abgemildert.

Es gibt zwei Benutzeridentitäten:

  • Die Identität des Kanalbenutzers. Ein Angreifer kann ihn für Identitätswechsel verwenden.
  • Die Identität des Benutzers vom Identitätsanbieter, den der Bot zum Authentifizieren des Benutzers verwendet. Ein Angreifer kann es für Identitätsspoofing verwenden.

Identitätswechsel

Der Identitätswechsel bezieht sich auf die Aktion eines Angreifers, der den Bot davon ausgibt, dass er eine andere Person ist. Beispielsweise kann der Angreifer in Webchat die Identität einer anderen Person durch Ändern der Benutzer-ID der Webchat Instanz imitieren.

Entschärfung des Identitätswechsels

  • Machen Sie die Benutzer-ID nichtguessierbar.

  • Verbinden einen Bot zu Direct Line.

  • Aktivieren Sie die erweiterte Authentifizierungsoption des Direct Line-Kanals, damit der Azure AI Bot-Dienst alle Benutzer-ID-Änderungen weiter erkennen und ablehnen kann. Dies bedeutet, dass die Benutzer-ID (Activity.From.Id) für Nachrichten von Direct Line an den Bot immer identisch mit dem Benutzer ist, den Sie zum Initialisieren des Webchat-Steuerelements verwendet haben.

    Hinweis

    Direct Line erstellt ein Token basierend auf dem geheimen Direct Line-Schlüssel und bettet das User.Id Token ein. Es stellt sicher, dass die an den Bot gesendeten Nachrichten dies User.Id als Aktivität aufweisen From.Id. Wenn ein Client eine Nachricht an direct Line sendet, die eine andere From.Idhat, wird sie in die im Token eingebettete ID geändert, bevor die Nachricht an den Bot weitergeleitet wird. Sie können also keine andere Benutzer-ID verwenden, nachdem ein Kanalschlüssel mit dieser ID initialisiert wurde.

    Für dieses Feature muss die Benutzer-ID wie dl_ unten dargestellt gestartet werden.

    Tipp

    Legen Sie für einen regionalen Bot entsprechend der ausgewählten Region fest dlUrl .
    Wenn "Europa ausgewählt" ausgewählt ist, legen Sie "https://europe.directline.botframework.com/v3/directline/tokens/generate"" fest.
    Wenn "Indien" ausgewählt ist, legen Sie "https://india.directline.botframework.com/v3/directline/tokens/generate"" fest.
    Weitere Informationen zu regionalen Bots finden Sie unter Regionalisierung im Azure AI Bot Service.

    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 basierend auf dem geheimen Direct Line-Schlüssel wird dann im Webchat-Steuerelement verwendet, wie unten dargestellt:

    @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ätsspoofing

Identitätsspoofing bezieht sich auf die Aktion eines Angreifers, die die Identität eines legitimen Benutzers annimmt und diese Identität dann verwendet, um ein schädliches Ziel zu erreichen.

Wenn ein Bot den Kanalbenutzer A fragt, sich bei einem Identitätsanbieter anzumelden, muss der Anmeldevorgang sicherstellen, dass Der Benutzer A der einzige ist, der sich beim Anbieter anmeldet. Wenn ein anderer Benutzer auch den Anbieter anmelden darf, hätte er Zugriff auf Benutzer A-Ressourcen über den Bot.

Entschärfung von Benutzeridentitätsspoofing

Im Webchat-Steuerelement gibt es zwei Mechanismen, um sicherzustellen, dass der richtige Benutzer angemeldet ist.

  1. Magic- Code. Am Ende der Anmeldung wird dem Benutzer bisher ein zufällig generierter 6-stelliger Code (auch bekannt als Magic-Code) bereitgestellt. Der Benutzer muss diesen Code in der Konversation eingeben, um den Anmeldevorgang abzuschließen. Dies führt dazu, dass die Benutzererfahrung schlecht ist. Darüber hinaus ist es anfällig für Phishingangriffe; Ein böswilliger Benutzer kann einen anderen Benutzer dazu verleiten, sich anzumelden und den magischen Code zu erhalten.

  2. Erweiterte Direct Line-Authentifizierung Verwenden Sie die erweiterte Direct Line-Authentifizierung, um sicherzustellen, dass der Anmeldevorgang nur in derselben Browsersitzung wie der Webchat-Client abgeschlossen werden kann.

    Um diesen Schutz zu aktivieren, starten Sie Webchat mit einem Direct Line-Token, das eine Liste der vertrauenswürdigen Aufgaben enthält Standard, die den Webchat-Client des Bots hosten können. Mit erweiterten Authentifizierungsoptionen können Sie die Liste der vertrauenswürdigen Aufgaben Standard (vertrauenswürdige Ursprünge) auf der Direct Line-Konfigurationsseite statisch angeben. Weitere Informationen finden Sie im Abschnitt "Erweiterte Authentifizierung konfigurieren".