Delen via


Verbeterde verificatie voor Direct Line

VAN TOEPASSING OP: SDK v4

In dit artikel worden mogelijke beveiligingsrisico's beschreven wanneer gebruikers verbinding maken met een bot, bijvoorbeeld met behulp van het Webchat beheer. Het toont ook oplossingen voor het beperken van oplossingen met behulp van de verbeterde verificatie-instellingen voor Direct Line en veilige verwerking van gebruikers-id's.

Er zijn twee gebruikersidentiteiten:

  • De identiteit van de kanaalgebruiker. Een aanvaller kan deze gebruiken voor imitatie.
  • De identiteit van de gebruiker van de id-provider die door de bot wordt gebruikt om de gebruiker te verifiëren. Een aanvaller kan deze gebruiken voor identiteitsvervalsing.

Imitatie

Imitatie verwijst naar de actie van een aanvaller die de bot doet denken dat ze iemand anders zijn. In Webchat kan de aanvaller bijvoorbeeld iemand anders imiteren door de gebruikers-id van het Webchat exemplaar te wijzigen.

Risicobeperking voor imitatie

  • Maak de gebruikers-id onguessable.

  • Verbinding maken een bot naar Direct Line.

  • Schakel de verbeterde verificatieoptie van het Direct Line-kanaal in om de Azure AI Bot Service toe te staan elke wijziging van de gebruikers-id verder te detecteren en af te wijzen. Dit betekent dat de gebruikers-id (Activity.From.Id) van berichten van Direct Line naar de bot altijd hetzelfde is als degene die u hebt gebruikt om het Webchat besturingselement te initialiseren.

    Notitie

    Direct Line maakt een token op basis van het directe lijngeheim en sluit het User.Id in het token in. Het verzekert dat de berichten die naar de bot worden verzonden, dat User.Id hebben als de activiteit From.Id. Als een client een bericht verzendt naar Direct Line met een andere From.Idregel, wordt het gewijzigd in de id die is ingesloten in het token voordat het bericht naar de bot wordt doorgestuurd. U kunt dus geen andere gebruikers-id gebruiken nadat een kanaalgeheim met die id is geïnitialiseerd.

    Voor deze functie moet de gebruikers-id beginnen dl_ zoals hieronder wordt weergegeven.

    Tip

    Voor een regionale bot stelt u deze in dlUrl op basis van de geselecteerde regio.
    Als europa is geselecteerd, stelt u 'https://europe.directline.botframework.com/v3/directline/tokens/generate"' in.
    Als India is geselecteerd, stelt u 'https://india.directline.botframework.com/v3/directline/tokens/generate"' in.
    Zie Regionalization in Azure AI Bot Service voor meer informatie over regionale bots.

    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);
        }
    }    
    
    

    Het gegenereerde token, op basis van het directe lijngeheim, wordt vervolgens gebruikt in het besturingselement Webchat, zoals hieronder wordt weergegeven:

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

Identiteitsvervalsing

Identiteitsvervalsing verwijst naar de actie van een aanvaller die ervan uitgaat dat de identiteit van een legitieme gebruiker wordt gebruikt en die identiteit vervolgens gebruikt om een schadelijk doel te bereiken.

Wanneer een bot de kanaalgebruiker A vraagt zich aan te melden bij een id-provider, moet het aanmeldingsproces ervoor zorgen dat gebruiker A de enige is die zich aanmeldt bij de provider. Als een andere gebruiker zich ook mag aanmelden bij de provider, heeft deze via de bot toegang tot gebruikers A-resources.

Beperking van adresvervalsing van gebruikersidentiteiten

In de Webchat controle zijn er twee mechanismen om ervoor te zorgen dat de juiste gebruiker is aangemeld.

  1. Magic code. Aan het einde van het aanmeldingsproces krijgt de gebruiker een willekeurig gegenereerde zescijferige code (magic code) te zien. De gebruiker moet deze code in het gesprek typen om het aanmeldingsproces te voltooien. Dit leidt meestal tot een slechte gebruikerservaring. Daarnaast is het vatbaar voor phishingaanvallen; een kwaadwillende gebruiker kan een andere gebruiker misleiden om zich aan te melden en de magic-code te verkrijgen.

  2. Verbeterde verificatie via Direct Line. Gebruik verbeterde verificatie via Direct Line om te garanderen dat het aanmeldingsproces alleen kan worden voltooid in dezelfde browsersessie als de Webchat-client.

    Als u deze beveiliging wilt inschakelen, start u Webchat met een Direct Line-token met een lijst met vertrouwde domeinen die de Webchat-client van de bot kunnen hosten. Met verbeterde verificatieopties kunt u statisch de lijst met vertrouwde domeinen (vertrouwde oorsprongen) opgeven op de pagina Direct Line-configuratie. Zie de sectie Verbeterde verificatie configureren.