Share via


Autenticazione avanzata direct Line

SI APPLICA A: SDK v4

Questo articolo descrive i potenziali rischi per la sicurezza quando gli utenti si connettono a un bot, ad esempio usando il controllo chat Web. Mostra anche soluzioni di mitigazione usando le impostazioni di autenticazione avanzata direct Line e la gestione sicura degli ID utente.

Esistono due identità utente:

  • Identità dell'utente del canale. Un utente malintenzionato può usarlo per la rappresentazione.
  • Identità dell'utente dal provider di identità usato dal bot per autenticare l'utente. Un utente malintenzionato può usarlo per lo spoofing di identità.

Rappresentazione

La rappresentazione si riferisce all'azione di un utente malintenzionato che fa pensare al bot di essere qualcun altro. Ad esempio, in chat Web, l'utente malintenzionato può rappresentare un altro utente modificando l'ID utente dell'istanza di chat Web.

Mitigazione della rappresentazione

  • Rendere impossibile l'ID utente.

  • Connessione un bot a Direct Line.

  • Abilitare l'opzione di autenticazione avanzata del canale Direct Line per consentire al servizio Bot di Intelligenza artificiale di Azure di rilevare e rifiutare ulteriormente qualsiasi modifica dell'ID utente. Ciò significa che l'ID utente (Activity.From.Id) nei messaggi da Direct Line al bot sarà sempre uguale a quello usato per inizializzare il controllo chat Web.

    Nota

    Direct Line crea un token basato sul segreto Direct Line e incorpora User.Id nel token. Garantisce che i messaggi inviati al bot abbiano tale messaggio User.Id come .From.Id Se un client invia un messaggio a Direct Line con un valore diverso From.Id, verrà modificato nell'ID incorporato nel token prima di inoltrare il messaggio al bot. Non è quindi possibile usare un altro ID utente dopo l'inizializzazione di un segreto del canale con tale ID.

    Questa funzionalità richiede che l'ID utente inizi con dl_ , come illustrato di seguito.

    Suggerimento

    Per un bot a livello di area, impostare dlUrl in base all'area selezionata.
    Se selezionata europa, impostare "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    Se l'opzione è selezionata in India, impostare "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Per altre informazioni sui bot a livello di area, vedere Regionalizzazione in Azure AI servizio Bot.

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

    Il token generato, basato sul segreto Direct Line, viene quindi usato nel controllo chat Web come illustrato di seguito:

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

Spoofing delle identità

Lo spoofing di identità fa riferimento all'azione di un utente malintenzionato che presuppone l'identità di un utente legittimo e quindi usa tale identità per raggiungere un obiettivo dannoso.

Quando un bot chiede all'utente del canale A di accedere a un provider di identità, il processo di accesso deve garantire che l'utente A sia l'unico che accede al provider. Se un altro utente può anche accedere al provider, avrà accesso alle risorse A dell'utente tramite il bot.

Mitigazione dello spoofing delle identità utente

Nel controllo chat Web sono disponibili due meccanismi per garantire che l'utente appropriato sia connesso.

  1. Codice magic. Al termine del processo di accesso, l'utente viene presentato con un codice a 6 cifre generato in modo casuale (codice magic). L'utente deve digitare questo codice nella conversazione per completare il processo di accesso. Ciò tende a causare un'esperienza utente non valida. Inoltre, è soggetto ad attacchi di phishing; un utente malintenzionato può ingannare un altro utente ad accedere e ottenere il codice magic.

  2. Autenticazione avanzata direct Line. Usare l'autenticazione avanzata direct Line per garantire che il processo di accesso possa essere completato solo nella stessa sessione del browser del client chat Web.

    Per abilitare questa protezione, avviare chat Web con un token Direct Line che contiene un elenco di domini attendibili che possono ospitare il client chat Web del bot. Con le opzioni di autenticazione avanzate, è possibile specificare staticamente l'elenco di domini attendibili (origini attendibili) nella pagina di configurazione di Direct Line. Vedere la sezione Configurare l'autenticazione avanzata.