Autenticação avançada 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 de bate-papo da Web. Além disso, mostra soluções de mitigação usando as configurações de autenticação aprimorada da 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.
Falsificação de identidade
Personificaçã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 a ID do usuário da instância do Web Chat.
Atenuação da representação
Torne o ID de utilizador imprevisível.
Habilite a opção de autenticação aprimorada do canal de Linha Direta para permitir que o Serviço de Bot do Azure AI detete e rejeite ainda mais qualquer alteração de ID de usuário. Isso significa que o ID de usuário (
Activity.From.Id
) nas mensagens da Linha Direta para o bot sempre será o mesmo que você usou para inicializar o controle do Web Chat.Nota
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 para o bot tenham issoUser.Id
como atividadeFrom.Id
. Se um cliente enviar uma mensagem para a Linha Direta com um arquivo diferenteFrom.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.Este recurso requer o ID do usuário para começar,
dl_
conforme mostrado abaixo.Gorjeta
Para um bot regional, defina
dlUrl
de acordo com a região selecionada.
Se selecionado europa, defina "https://europe.directline.botframework.com/v3/directline/tokens/generate".
Se selecionado india, 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 do Azure AI.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, é então usado no controle de bate-papo da Web, 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
A 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 atingir um objetivo mal-intencionado.
Quando um bot solicita 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 de bate-papo da Web, há dois mecanismos para garantir que o usuário adequado esteja conectado.
Código mágico. No final do processo de início de sessão, é apresentado ao utilizador um código de 6 dígitos gerado aleatoriamente (código mágico). O usuário deve digitar esse código na conversa para concluir o processo de login. 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 aprimorada de linha direta. 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 contenha uma lista de domínios confiáveis que podem hospedar o cliente de Web Chat do bot. Com as opções de autenticação avançadas, você pode especificar estaticamente a lista de domínios confiáveis (origens confiáveis) na página de configuração de Linha Direta. Consulte a seção Configurar autenticação avançada.