Autentikasi yang disempurnakan Direct Line

BERLAKU UNTUK: SDK v4

Artikel ini menjelaskan potensi risiko keamanan saat pengguna tersambung ke bot, misalnya menggunakan kontrol Web Chat . Selain itu, ini menunjukkan solusi mitigasi menggunakan pengaturan autentikasi Direct Line yang ditingkatkan dan penanganan ID pengguna yang aman.

Ada dua identitas pengguna:

  • Identitas pengguna saluran. Penyerang dapat menggunakannya untuk Peniruan Identitas.
  • Identitas pengguna dari penyedia identitas yang digunakan bot untuk mengautentikasi pengguna. Penyerang dapat menggunakannya untuk Spoofing identitas.

Peniruan

Peniruan mengacu pada tindakan penyerang yang membuat bot berpikir bahwa mereka orang lain. Misalnya, di Web Chat, penyerang dapat meniru orang lain dengan mengubah ID pengguna instans Web Chat.

Mitigasi peniruan

  • Buat ID pengguna tidak dapat dinyatakan.

  • Koneksi bot ke Direct Line.

  • Aktifkan opsi autentikasi saluran Direct Line yang disempurnakan untuk memungkinkan Azure AI Bot Service mendeteksi dan menolak perubahan ID pengguna lebih lanjut. Ini berarti ID pengguna (Activity.From.Id) pada pesan dari Direct Line ke bot akan selalu sama dengan yang Anda gunakan untuk menginisialisasi kontrol Web Chat.

    Catatan

    Direct Line membuat token berdasarkan rahasia Direct Line dan menyematkan User.Id dalam token. Ini memastikan bahwa pesan yang dikirim ke bot memilikinya User.Id sebagai aktivitas From.Id. Jika klien mengirim pesan ke Direct Line memiliki yang berbeda From.Id, itu akan diubah ke ID yang disematkan dalam token sebelum meneruskan pesan ke bot. Jadi Anda tidak dapat menggunakan ID pengguna lain setelah rahasia saluran diinisialisasi dengan ID tersebut.

    Fitur ini mengharuskan ID pengguna dimulai dengan dl_ seperti yang ditunjukkan di bawah ini.

    Tip

    Untuk bot regional, atur dlUrl sesuai dengan wilayah yang dipilih.
    Jika dipilih eropa, atur "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    Jika dipilih india, atur "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Untuk informasi selengkapnya tentang bot regional, lihat Regionalisasi di 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);
        }
    }    
    
    

    Token yang dihasilkan, berdasarkan rahasia Direct Line, kemudian digunakan dalam kontrol Web Chat seperti yang ditunjukkan di bawah ini:

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

Spoofing identitas mengacu pada tindakan penyerang yang mengasumsikan identitas pengguna yang sah dan kemudian menggunakan identitas tersebut untuk mencapai tujuan berbahaya.

Ketika bot meminta pengguna saluran A untuk masuk ke penyedia identitas, proses masuk harus memastikan bahwa pengguna A adalah satu-satunya yang masuk ke penyedia. Jika pengguna lain juga diizinkan untuk masuk ke penyedia, mereka akan memiliki akses ke pengguna Sumber daya A melalui bot.

Mitigasi spoofing identitas pengguna

Dalam kontrol Web Chat, ada dua mekanisme untuk memastikan bahwa pengguna yang tepat masuk.

  1. Kode ajaib. Pada akhir proses masuk, pengguna disajikan dengan kode 6 digit yang dihasilkan secara acak (kode ajaib). Pengguna harus mengetik kode ini dalam percakapan untuk menyelesaikan proses masuk. Ini cenderung menghasilkan pengalaman pengguna yang buruk. Selain itu, rentan terhadap serangan phishing; pengguna berbahaya dapat mengelabui pengguna lain untuk masuk dan mendapatkan kode ajaib.

  2. Autentikasi Direct Line yang disempurnakan. Gunakan autentikasi yang disempurnakan Direct Line untuk menjamin bahwa proses masuk hanya dapat diselesaikan dalam sesi browser yang sama dengan klien Web Chat.

    Untuk mengaktifkan perlindungan ini, mulai Web Chat dengan token Direct Line yang berisi daftar domain tepercaya yang dapat menghosting klien Web Chat bot. Dengan opsi autentikasi yang disempurnakan, Anda dapat menentukan daftar domain tepercaya (asal tepercaya) secara statis di halaman konfigurasi Direct Line. Lihat bagian Mengonfigurasi autentikasi yang disempurnakan.