Direct Line gelişmiş kimlik doğrulaması

ŞUNLAR IÇIN GEÇERLIDIR: SDK v4

Bu makalede, örneğin Web Sohbeti denetimini kullanarak kullanıcılar bir bota bağlandığında olası güvenlik riskleri açıklanmaktadır. Ayrıca, Direct Line gelişmiş kimlik doğrulama ayarlarını ve güvenli kullanıcı kimliği işlemeyi kullanarak azaltıcı çözümleri gösterir.

İki kullanıcı kimliği vardır:

  • Kanal kullanıcısının kimliği. Saldırgan bunu Kimliğe Bürünme için kullanabilir.
  • Bot tarafından kullanıcının kimliğini doğrulamak için kullanılan kimlik sağlayıcısından kullanıcının kimliği. Saldırgan bunu Kimlik sahtekarlığına yönelik olarak kullanabilir.

Kimliğe bürünme

Kimliğe bürünme, botun başka biri olduğunu düşünmesini sağlayan bir saldırganın eylemini ifade eder. Örneğin, Web Sohbeti'da saldırgan, Web Sohbeti örneğinin kullanıcı kimliğini değiştirerek başka birinin kimliğine bürünebilir.

Kimliğe bürünme azaltma

  • Kullanıcı kimliğini belirsiz hale getirin.

  • Doğrudan Hat'a bir bot Bağlan.

  • Azure AI Bot Hizmeti kullanıcı kimliği değişikliklerini daha fazla algılamasına ve reddetmesine izin vermek için Direct Line kanalının gelişmiş kimlik doğrulama seçeneğini etkinleştirin. Bu, Doğrudan Hat'tan bota iletilerde kullanıcı kimliğinin (Activity.From.Id) her zaman Web Sohbeti denetimini başlatmak için kullandığınız kimlikle aynı olacağı anlamına gelir.

    Not

    Direct Line, Direct Line gizli dizisini temel alan bir belirteç oluşturur ve öğesini belirtecin içine ekler User.Id . Bu, bota gönderilen iletilerin etkinliği From.Idolarak buna sahip olmasını User.Id sağlar. İstemci, farklı From.Idbir değeri olan bir iletiyi Doğrudan Satır'a gönderirse, ileti bota iletilmeden önce belirtecin içine eklenmiş kimlik olarak değiştirilir. Bu nedenle, kanal gizli dizisi bu kimlikle başlatıldıktan sonra başka bir kullanıcı kimliği kullanamazsınız.

    Bu özellik, aşağıda gösterildiği gibi kullanıcı kimliğinin ile dl_ başlamasını gerektirir.

    İpucu

    Bölgesel bir bot için seçili bölgeye göre ayarlayın dlUrl .
    Avrupa'yı seçtiyseniz "https://europe.directline.botframework.com/v3/directline/tokens/generate".
    Hindistan'ı seçtiyseniz "https://india.directline.botframework.com/v3/directline/tokens/generate".
    Bölgesel botlar hakkında daha fazla bilgi için bkz. Azure AI Bot Hizmeti'da bölgeselleştirme.

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

    Doğrudan Çizgi gizli dizisini temel alan oluşturulan belirteç daha sonra aşağıda gösterildiği gibi Web Sohbeti denetiminde kullanılır:

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

Kimlik sahtekarlık

Kimlik sahtekarlık, meşru bir kullanıcının kimliğini varsayan ve ardından kötü amaçlı bir hedefe ulaşmak için bu kimliği kullanan bir saldırganın eylemini ifade eder.

Bot, A kanalından bir kimlik sağlayıcısında oturum açmasını istediğinde, oturum açma işlemi A kullanıcısının sağlayıcıda oturum açabilen tek kullanıcı olduğundan emin olmalıdır. Başka bir kullanıcının da sağlayıcıda oturum açmasına izin verilirse bot aracılığıyla A kullanıcı kaynaklarına erişebilir.

Kullanıcı kimliği kimlik sahtekarlığı azaltma

Web Sohbeti denetiminde, uygun kullanıcının oturum açtığından emin olmak için iki mekanizma vardır.

  1. Sihirli kod. Oturum açma işleminin sonunda kullanıcıya rastgele oluşturulan 6 basamaklı bir kod (sihirli kod) sunulur. Kullanıcının oturum açma işlemini tamamlamak için konuşmaya bu kodu yazması gerekir. Bu, kötü bir kullanıcı deneyimine neden olma eğilimindedir. Ayrıca, kimlik avı saldırılarına açıktır; kötü amaçlı bir kullanıcı, başka bir kullanıcıyı kandırarak oturum açmasını ve sihirli kodu almasını sağlayabilir.

  2. Direct Line gelişmiş kimlik doğrulaması. Oturum açma işleminin yalnızca Web Sohbeti istemcisiyle aynı tarayıcı oturumunda tamamlanacağını garanti etmek için Direct Line gelişmiş kimlik doğrulamasını kullanın.

    Bu korumayı etkinleştirmek için Web Sohbeti botun Web Sohbeti istemcisini barındırabilecek güvenilen etki alanlarının listesini içeren bir Doğrudan Hat belirteci ile başlatın. Gelişmiş kimlik doğrulama seçenekleriyle, Doğrudan Hat yapılandırma sayfasında güvenilen etki alanları (güvenilen kaynaklar) listesini statik olarak belirtebilirsiniz. Gelişmiş kimlik doğrulamasını yapılandırma bölümüne bakın.