Autenticação aprimorada de linha direta
APLICA-SE A: SDK v4
Este artigo descreve possíveis riscos de segurança quando os usuários se conectam a um bot, por exemplo, usando o controle Web Chat . Além disso, ele mostra soluções atenuantes usando as configurações de autenticação aprimoradas de Linha Direta e o tratamento seguro de ID do usuário.
Há duas identidades de usuário:
- A identidade do usuário do canal. Um invasor pode usá-lo para representação.
- A identidade do usuário do provedor de identidade que o bot usa para autenticar o usuário. Um invasor pode usá-lo para falsificação de identidade.
Representação
A representação refere-se à ação de um invasor que faz o bot pensar que é outra pessoa. Por exemplo, no Chat da Web, o invasor pode se passar por outra pessoa alterando o ID do usuário da instância do Web Chat.
Mitigação de representação
Torne o ID do usuário imprevisível.
Habilite a opção de autenticação aprimorada do canal de Linha Direta para permitir que o Serviço de Bot de IA do Azure detecte e rejeite ainda mais qualquer alteração de ID de usuário. Isso significa que o ID do usuário (
Activity.From.Id
) nas mensagens da Linha Direta para o bot será sempre o mesmo que você usou para inicializar o controle do Web Chat.Observação
A Linha Direta cria um token com base no segredo da Linha Direta e incorpora o
User.Id
no token. Ele garante que as mensagens enviadas ao bot tenham issoUser.Id
como atividadeFrom.Id
. Se um cliente enviar uma mensagem para a Linha Direta com umFrom.Id
, ela será alterada para o ID incorporado no token antes de encaminhar a mensagem para o bot. Portanto, você não pode usar outro ID de usuário depois que um segredo de canal é inicializado com esse ID.Esse recurso requer o ID do usuário para começar
dl_
, conforme mostrado abaixo.Dica
Para um bot regional, defina
dlUrl
de acordo com a região selecionada.
Se selecionado europe, defina "https://europe.directline.botframework.com/v3/directline/tokens/generate".
Se selecionado índia, defina "https://india.directline.botframework.com/v3/directline/tokens/generate".
Para obter mais informações sobre bots regionais, consulte Regionalização no Serviço de Bot de IA do Azure.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); } }
O token gerado, com base no segredo da Linha Direta, é usado no controle Web Chat, conforme mostrado abaixo:
@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>
Falsificação de identidade
Falsificação de identidade refere-se à ação de um invasor que assume a identidade de um usuário legítimo e, em seguida, usa essa identidade para realizar uma meta mal-intencionada.
Quando um bot pede ao usuário do canal A para entrar em um provedor de identidade, o processo de entrada deve garantir que o usuário A seja o único que entra no provedor. Se outro usuário também tiver permissão para entrar no provedor, ele terá acesso aos recursos do usuário A por meio do bot.
Mitigação de falsificação de identidade do usuário
No controle WebChat, há dois mecanismos para garantir que o usuário correto esteja conectado.
Código mágico. Ao final do processo para iniciar sessão, o usuário recebe um código de seis dígitos gerado aleatoriamente (código mágico). O usuário deve digitar esse código na conversa para concluir o processo para iniciar sessão. Isso tende a resultar em uma experiência ruim para o usuário. Além disso, é suscetível a ataques de phishing; Um usuário mal-intencionado pode enganar outro usuário para entrar e obter o código mágico.
Autenticação avançada do Direct Line. Use a autenticação aprimorada de Linha Direta para garantir que o processo de entrada só possa ser concluído na mesma sessão do navegador que o cliente de Web Chat.
Para habilitar essa proteção, inicie o Web Chat com um token de Linha Direta que contém uma lista de domínios confiáveis que podem hospedar o cliente de Web Chat do bot. Com as opções de autenticação aprimoradas, você pode especificar estaticamente a lista de domínios confiáveis (origens confiáveis) na página Configuração de Linha Direta. Consulte a seção Configurar autenticação avançada.