직접 회선 향상 된 인증Direct Line enhanced authentication

적용 대상: SDK v4APPLIES TO: SDK v4

이 문서에서는 사용자가 웹 채팅 컨트롤을 사용 하는 등의 봇에 연결할 때 발생할 수 있는 보안 위험을 설명 합니다.This article describes potential security risks when users connect to a bot, for example using the Web Chat control. 또한 직접 회선 고급 인증 설정 및 보안 사용자 ID 처리를 사용 하는 완화 솔루션을 보여 줍니다.Also, it shows mitigating solutions using the Direct Line enhanced authentication settings and secure user ID handling.

사용자는 다음 두 가지 사용자 id를 알고 있어야 합니다.You must be aware that there are two user identities:

  • 채널 사용자의 id입니다.The channel user's identity. 공격자는 가장에 사용할 수 있습니다.An attacker can use it for Impersonation.
  • 봇에서 사용자를 인증 하는 데 사용 하는 id 공급자의 사용자 id입니다.The user's identity from the identity provider that the bot uses to authenticate the user. 공격자는 id 스푸핑에이를 사용할 수 있습니다.An attacker can use it for Identity spoofing.

가장Impersonation

가장은 봇이 다른 사람 이라고 생각 하는 공격자의 작업을 의미 합니다.Impersonation refers to the action of an attacker that makes the bot think he is someone else. 예를 들어 웹 채팅에서 공격자는 웹 채팅 인스턴스의 사용자 ID를 변경 하 여 다른 사용자를 가장할 수 있습니다.For example, in Web Chat, the attacker can impersonate someone else by changing the user ID of the Web Chat instance.

가장 완화Impersonation mitigation

  • 사용자 ID를 unguessable 설정 합니다.Make the user ID unguessable.

  • 직접 줄에 봇을 연결합니다.Connect a bot to Direct Line.

  • 직접 선 채널의 고급 인증 옵션을 사용 하도록 설정 하 여 Azure Bot Service에서 사용자 ID 변경을 추가로 검색 하 고 거부할 수 있습니다.Enable the Direct Line channel's enhanced authentication option to allow the Azure Bot Service to further detect and reject any user ID change. 즉, Activity.From.Id 직접 줄에서 봇으로의 메시지에 대 한 사용자 ID ()는 항상 웹 채팅 컨트롤을 초기화 하는 데 사용한 것과 동일한 것입니다.This means the user ID (Activity.From.Id) on messages from Direct Line to the bot will always be the same as the one you used to initialize the Web Chat control.

    참고

    Direct Line은 직접 선 비밀을 기반으로 토큰 을 만들고 토큰에 User.Id 를 포함 합니다.Direct Line creates a token based on the Direct Line secret and embeds the User.Id in the token. Bot로 전송 되는 메시지에는 해당 User.Id 활동의 From.Id 로 보장 됩니다. 클라이언트가 다른 From.Id 를 갖는 메시지를 전달 하는 경우 메시지를 봇으로 전달 하기 전에 토큰에 포함 된 Id 로 변경 됩니다.It assures that the messages sent to the bot have that User.Id as the activity's From.Id. If a client sends a message to Direct Line having a different From.Id, it will be changed to the Id embedded in the token before forwarding the message to the bot. 따라서 채널 비밀이 해당 ID로 초기화 된 후에는 다른 사용자 ID를 사용할 수 없습니다.So you cannot use another user ID after a channel secret is initialized with that ID.

    이 기능을 사용 하려면 아래와 같이 사용자 ID를 시작 해야 합니다 dl_ .This feature requires the user ID to start with dl_ as shown below:

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

    직접 줄 암호를 기반으로 생성 된 토큰은 아래와 같이 웹 채팅 컨트롤에서 사용 됩니다.The generated token, based on the Direct Line secret, is then used in the Web Chat control as shown below:

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

Id 스푸핑Identity spoofing

Id 스푸핑은 합법적인 사용자의 id를 가정 하 고이 id를 사용 하 여 악의적인 목표를 달성 하는 공격자의 작업을 나타냅니다.Identity spoofing refers to the action of an attacker that assumes the identity of a legitimate user and then uses that identity to accomplish a malicious goal.

봇에서 채널 사용자에 게 id 공급자에 로그인 하 라는 메시지를 표시 하는 경우 로그인 프로세스는 사용자 A가 공급자에 로그인 하는 유일한 사용자 인지 확인 해야 합니다.When a bot asks the channel user A to sign-in to an identity provider, the sign-in process must assure that user A is the only one that signs into the provider. 다른 사용자도 공급자에 로그인 할 수 있는 경우 bot을 통해 사용자에 게 리소스에 대 한 액세스 권한이 있습니다.If another user is also allowed to sign-in the provider, they would have access to user A resources through the bot.

사용자 id 스푸핑 완화User identity spoofing mitigation

웹 채팅 컨트롤에는 적절 한 사용자가 로그인 되도록 보장 하는 두 가지 메커니즘이 있습니다.In the Web Chat control, there are two mechanisms to assure that the proper user is signed in.

  1. 매직 코드.Magic code. 로그인 프로세스가 끝나면 사용자에 게 임의로 생성 된 6 자리 코드 (매직 code)가 표시 됩니다.At the end of the sign-in process, the user is presented with a randomly generated 6-digit code (magic code). 사용자는 대화에이 코드를 입력 하 여 로그인 프로세스를 완료 해야 합니다.The user must type this code in the conversation to complete the sign-in process. 이로 인해 사용자 환경이 잘못 될 수 있습니다.This tends to result in a bad user's experience. 또한 여전히 피싱 공격에 취약합니다.Additionally, it is still susceptible to phishing attacks. 악의적인 사용자는 다른 사용자에게 로그인하고 피싱을 통해 매직 코드를 얻을 수 있습니다.A malicious user can trick another user to sign-in and obtain the magic code through phishing.

    경고

    매직 코드의 사용은 더 이상 사용 되지 않습니다.The use of the magic code has been deprecated. 대신 아래에 설명 된 직접 줄 고급 인증 방법을 사용 하는 것이 좋습니다.Instead, it's recommended to use the Direct Line enhanced authentication approach, described below.

  2. 직접 줄 고급 인증 입니다.Direct Line enhanced authentication. 매직 code 접근법의 문제로 인해 Azure Bot Service 필요 하지 않습니다.Because of the issues with the magic code approach, Azure Bot Service removed its need. Azure Bot Service는 로그인 프로세스가 웹 채팅 자체와 동일한 브라우저 세션 에서 완료되도록 보장할 수 있습니다.Azure Bot Service guarantees that the sign-in process can only be completed in the same browser session as the Web Chat itself. 이 보호를 사용 하도록 설정 하려면 bot의 웹 채팅 클라이언트를 호스트할 수 있는 신뢰할 수 있는 도메인 목록을 포함 하는 직접 회선 토큰 을 사용 하 여 웹 채팅을 시작 해야 합니다.To enable this protection, you must start Web Chat with a Direct Line token that contains a list of trusted domains that can host the bot's Web Chat client. 고급 인증 옵션을 사용 하면 직접 줄 구성 페이지에서 신뢰할 수 있는 도메인 (신뢰할 수 있는 원본) 목록을 정적으로 지정할 수 있습니다.With enhanced authentication options, you can statically specify the trusted domains (trusted origins) list in the Direct Line configuration page. 고급 인증 구성 섹션을 참조 하세요.See Configure enhanced authentication section.