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.
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 memilikinyaUser.Id
sebagai aktivitasFrom.Id
. Jika klien mengirim pesan ke Direct Line memiliki yang berbedaFrom.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.
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.
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.