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.
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 diesUser.Id
als Aktivität aufweisenFrom.Id
. Wenn ein Client eine Nachricht an direct Line sendet, die eine andereFrom.Id
hat, 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.
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.
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".