Authentification améliorée direct Line

S'APPLIQUE À : SDK v4

Cet article décrit les risques de sécurité potentiels lorsque les utilisateurs se connectent à un bot, par exemple à l’aide du contrôle Chat Web. En outre, il montre des solutions d’atténuation à l’aide des paramètres d’authentification améliorés Direct Line et de la gestion sécurisée des ID utilisateur.

Il existe deux identités d’utilisateur :

  • Identité de l’utilisateur du canal. Un attaquant peut l’utiliser pour l’emprunt d’identité.
  • Identité de l’utilisateur du fournisseur d’identité que le bot utilise pour authentifier l’utilisateur. Un attaquant peut l’utiliser pour l’usurpation d’identité.

Emprunt d'identité

L’emprunt d’identité fait référence à l’action d’un attaquant qui fait penser au bot qu’il est quelqu’un d’autre. Par exemple, dans Chat Web, l’attaquant peut emprunter l’identité d’une autre personne en modifiant l’ID utilisateur de l’instance Chat Web.

Atténuation de l’emprunt d’identité

  • Rendre l’ID utilisateur inguessable.

  • Connecter un bot vers Direct Line.

  • Activez l’option d’authentification améliorée du canal Direct Line pour permettre à Azure AI Bot Service de détecter et rejeter davantage toute modification d’ID utilisateur. Cela signifie que l’ID utilisateur (Activity.From.Id) sur les messages de Direct Line au bot est toujours le même que celui que vous avez utilisé pour initialiser le contrôle Chat Web.

    Remarque

    Direct Line crée un jeton basé sur le secret Direct Line et incorpore le User.Id jeton. Il garantit que les messages envoyés au bot ont celui-ci User.Id comme activité From.Id. Si un client envoie un message à Direct Line ayant une autre From.Idvaleur, il est remplacé par l’ID incorporé dans le jeton avant de transférer le message au bot. Vous ne pouvez donc pas utiliser un autre ID d’utilisateur après l’initialisation d’un secret de canal avec cet ID.

    Cette fonctionnalité nécessite l’ID utilisateur pour commencer dl_ comme indiqué ci-dessous.

    Conseil

    Pour un bot régional, définissez dlUrl en fonction de la région sélectionnée.
    Si cette option est sélectionnée, définissez «https://europe.directline.botframework.com/v3/directline/tokens/generate" ;.
    Si l’inde est sélectionnée, définissez «https://india.directline.botframework.com/v3/directline/tokens/generate" ;.
    Pour plus d’informations sur les bots régionaux, consultez Regionalization in 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);
        }
    }    
    
    

    Le jeton généré, basé sur le secret Direct Line, est ensuite utilisé dans le contrôle Chat Web, comme indiqué ci-dessous :

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

Usurpation d’identité

L’usurpation d’identité fait référence à l’action d’un attaquant qui suppose l’identité d’un utilisateur légitime, puis utilise cette identité pour atteindre un objectif malveillant.

Lorsqu’un bot demande à l’utilisateur de canal A de se connecter à un fournisseur d’identité, le processus de connexion doit s’assurer que l’utilisateur A est le seul qui se connecte au fournisseur. Si un autre utilisateur est également autorisé à se connecter au fournisseur, il aurait accès aux ressources A de l’utilisateur via le bot.

Atténuation de l’usurpation d’identité de l’utilisateur

Dans le contrôle Chat Web, il existe deux mécanismes pour garantir que le bon utilisateur est connecté.

  1. Code magique. À la fin de la procédure de connexion, l'utilisateur reçoit un code à 6 chiffres généré de manière aléatoire (le code magique). L’utilisateur doit saisir ce code dans la conversation pour terminer le processus de connexion. Cela a tendance à entraîner une mauvaise expérience utilisateur. En outre, il est susceptible d’attaques par hameçonnage ; un utilisateur malveillant peut tromper un autre utilisateur pour se connecter et obtenir le code magique.

  2. Authentification améliorée Direct Line. Utilisez l’authentification améliorée Direct Line pour garantir que le processus de connexion ne peut être effectué que dans la même session de navigateur que le client Chat Web.

    Pour activer cette protection, démarrez Chat Web avec un jeton Direct Line qui contient une liste de domaines approuvés pouvant héberger le client Chat Web du bot. Avec les options d’authentification améliorées, vous pouvez spécifier statiquement la liste des domaines approuvés (origines approuvées) dans la page de configuration Direct Line. Consultez la section Configurer l’authentification améliorée.