Utökad direktlinjeautentisering
GÄLLER FÖR: SDK v4
Den här artikeln beskriver potentiella säkerhetsrisker när användare ansluter till en robot, till exempel med hjälp av Webbchatt kontroll. Dessutom visas mildrande lösningar med hjälp av inställningarna för förbättrad autentisering via Direktrad och säker användar-ID-hantering.
Det finns två användaridentiteter:
- Kanalanvändarens identitet. En angripare kan använda den för personifiering.
- Användarens identitet från identitetsprovidern som roboten använder för att autentisera användaren. En angripare kan använda den för identitetsförfalskning.
Personifiering
Personifiering refererar till en angripares åtgärd som får roboten att tro att de är någon annan. I Webbchatt kan angriparen till exempel personifiera någon annan genom att ändra användar-ID:t för den Webbchatt instansen.
Personifieringsreducering
Gör användar-ID unguessable.
Aktivera Direct Line-kanalens utökade autentiseringsalternativ så att Azure AI Bot Service kan identifiera och avvisa ändringar i användar-ID ytterligare. Det innebär att användar-ID :t (
Activity.From.Id
) på meddelanden från Direct Line till roboten alltid kommer att vara detsamma som det som du använde för att initiera Webbchatt kontrollen.Kommentar
Direct Line skapar en token baserat på direct line-hemligheten
User.Id
och bäddar in i token. Det säkerställer att de meddelanden som skickas till roboten har detUser.Id
som aktivitetensFrom.Id
. Om en klient skickar ett meddelande till Direct Line med en annanFrom.Id
ändras det till det ID som är inbäddat i token innan meddelandet vidarebefordras till roboten. Du kan därför inte använda något annat användar-ID när en kanalhemlighet har initierats med det ID:t.Den här funktionen kräver att användar-ID:t börjar med
dl_
enligt nedan.Dricks
För en regional robot anger du
dlUrl
enligt den valda regionen.
Om du väljer europa anger du "https://europe.directline.botframework.com/v3/directline/tokens/generate".
Om du väljer indien anger du "https://india.directline.botframework.com/v3/directline/tokens/generate".
Mer information om regionala robotar finns i Regionalisering i 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); } }
Den genererade token, baserat på Direct Line-hemligheten, används sedan i Webbchatt-kontrollen enligt nedan:
@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>
Identitetsförfalskning
Identitetsförfalskning refererar till en angripares åtgärd som förutsätter identiteten för en legitim användare och sedan använder den identiteten för att uppnå ett skadligt mål.
När en robot ber kanalanvändareN A att logga in på en identitetsprovider måste inloggningsprocessen säkerställa att användare A är den enda som loggar in på providern. Om en annan användare också får logga in på providern skulle de ha åtkomst till användare A-resurser via roboten.
Förfalskning av användaridentiteter
I den Webbchatt kontrollen finns det två mekanismer för att säkerställa att rätt användare är inloggad.
Magisk kod. I slutet av inloggningsprocessen visas användaren med en slumpmässigt genererad 6-siffrig kod (magisk kod). Användaren måste skriva den här koden i konversationen för att slutföra inloggningsprocessen. Detta tenderar att resultera i en dålig användarupplevelse. Dessutom är det känsligt för nätfiskeattacker. En obehörig användare kan lura en annan användare att logga in och hämta den magiska koden.
Förbättrad direktlinjeautentisering. Använd förbättrad direktradsautentisering för att garantera att inloggningsprocessen endast kan slutföras i samma webbläsarsession som den Webbchatt klienten.
Om du vill aktivera det här skyddet börjar du Webbchatt med en direktradstoken som innehåller en lista över betrodda domäner som kan vara värd för robotens Webbchatt-klient. Med förbättrade autentiseringsalternativ kan du statiskt ange listan över betrodda domäner (betrott ursprung) på konfigurationssidan direktrad. Se avsnittet Konfigurera förbättrad autentisering.