Este artigo explica a autenticação de dois fatores em detalhes e como ele pode ser implementado no .NET 5 usando estruturas de identidade como o IdentityServer4 e um provedor SMS (Twilio).

{{LINE_11}} Ele contém as seguintes seções:

O que é autenticação de dois fatores?

Um fator nesse contexto implica uma maneira de convencer um aplicativo ou serviço de que você é o proprietário da conta. O nome de usuário/senha é amplamente utilizado como o fator de autenticação mais comum. No entanto, devido a muitos problemas de segurança associados a TI e violações de dados generalizadas recentes-a autenticação de fator único se tornou menos seguro. A autenticação de dois fatores é uma camada adicional de segurança, que entra em jogo antes que você possa acessar sua conta. A adição no processo de login padrão-ele introduz uma etapa extra para verificar a identidade do usuário enviando um código (para o seu email ou como uma mensagem de texto). Dessa forma, sua identidade é comprovada e só então o acesso é concedido.

Como funciona o 2FA?

No 2FA, a senha ainda é seu primeiro fator de autenticação - então, quando você faz login na sua conta, ela o redirecionará para outra página em que você precisar verificar a propriedade da conta. Isso pode ser feito usando várias maneiras:

  1. O aplicativo envia um código de verificação frequentemente chamado OTP (senhas únicas) para o seu endereço de e-mail.
  2. O código é entregue como uma mensagem de texto no seu telefone.
  3. Você instala um aplicativo autenticador no celular, através do qual pode autorizar solicitações de login. NOTA: Esses códigos de verificação são gerados aleatoriamente e expirados uma vez usados. Além disso, eles têm vida curta - então há uma janela curta antes que você possa usar o código (isso impede o hacker para forçar os códigos de verificação).

Podemos chamar o 2FA como autenticação multifatorial?

Os métodos de autenticação não se limitam a dois fatores. Muitos aplicativos e serviços estão movendo seus usuários além do 2FA e usando a autenticação multifatorial. 2FA e MFA (autenticação multifatorial) são frequentemente usados ​​de forma intercambiável. No entanto, há uma diferença. Na autenticação de vários fatores, dois ou mais fatores são usados. Ele pode verificar o endereço IP de um usuário, localização geográfica e informações de dispositivo em relação a outros fatores, como uma senha e OTP, para verificar a identidade do usuário. Portanto, podemos dizer que o 2FA é um subconjunto de MFA. No 2FA, haverá apenas dois fatores, enquanto o multi-fator pode utilizar dois ou mais fatores. O MFA torna difícil para hackers, pois adiciona várias camadas de segurança no processo de autenticação tradicional.

Existem desvantagens usando 2fa?

Semelhante a muitas soluções de “segurança e privacidade” que existem em aplicativos modernos. Ele também tem um preço - inconveniente, pois há uma etapa adicional envolvida que pode causar atrito na experiência do usuário. No entanto, está sendo adotado por muitos aplicativos e serviços, portanto essa troca está se tornando aceitável.

Como posso implementar a autenticação 2FA?

Nesta seção, aprenderemos como implementar o 2FA no .NET5 usando o IdentityServer4 e o Twilio. Então, vamos criar uma conta de avaliação no Twilio:

  1. Inscreva -se
  2. Verifique sua conta fornecendo um número de telefone válido. Depois que sua conta for verificada, você poderá usar o painel do console.
Painel de Twilio
  1. Copie sua conta SID e autentique o token do painel.
  2. Navegue para comprar um número que você usará para enviar SMS/ NOTA: O Twilio fornece 15 $ Credit em todas as contas de avaliação que você usará para comprar o número de telefone.
Twilio - Pesquisa de número de telefone

Você pode escolher qualquer número, desde que ofereça ‘recursos de SMS’. (Anote seu número de telefone que usaremos para configurar mais adiante em nosso projeto). 5. Usando a conta de teste, o Twilio apenas permite que você envie SMS para um IDS de chamadas verificado que você pode gerenciar usando o link abaixo: É tudo o que você precisa configurar usando o Twilio Painel. Vamos criar um aplicativo Web ASP.NET Core (selecione Modelo de Projeto como abaixo e Target .NET5.

Visual Studio - novo projeto

Agora, integraremos o IdentityServer4, Pacotes Twilio da Nuget.

  1. Install -Package IdentityServer4 -version 4.1.1
  2. Install -Package Twilio -version 5.55.0 IdentityServer4 Ui Quick está disponível em: Você pode incluí -lo em seu projeto executando o comando abaixo no desenvolvedor Shell: iex ((new-object System.net.webclient) .DownloadString ('https://raw.githubusercontent.com/IdentityServer/IdentityServer4.quickstart.ui/main/getmain.ps1') Se fosse instalado corretamente - você veria a pasta QuickStart em seu projeto:
Hierarquia do projeto

Vamos construir e executar este projeto. Você deve poder ver a página de boas -vindas como mostrado abaixo:

Este modelo usa o armazenamento de dados na memória para que você possa adicionar seus usuários de teste no arquivo config.cs

Classe config.cs

Open Startup.cs e adicione os seguintes serviços IdentityServer4 no método ConfigServices:

  services.AddIdentityServer()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddTestUsers(Config.GetUsers())
        .AddInMemoryClients(Config.GetClients())
        .AddDeveloperSigningCredential();

Agora adicione o IdentityServer no Pedido Pipeline:

app.UseIdentityServer();

Execute o projeto e navegue para _/conta/login _

IdentityServer4 - Login

Faça login com as credenciais, conforme adicionado em config.cs Uma vez que o IdentityServer esteja configurado e em execução. Em seguida, podemos adicionar suporte ao 2FA usando o Twilio. Vamos adicionar aula seguinte:

  public class TwilioSettings
    {
        public string Sid { get; set; }
        public string Token { get; set; }
        public string From { get; set; }
     }

Esta classe de configuração será usada para injetar configurações usando injeção de dependência.

  1. Clique com a direita no projeto e adicione os segredos do usuário com a configuração do Twilio (Sid, Token, PhoneNumber)
  2. Injetar as configurações no método do ConfigurService de startup.cs
 var twilioSettings = Configuration.GetSection("TwilioSettings");
 services.Configure<TwilioSettings>(twilioSettings);

Startup.cs foi configurado. Agora, podemos avançar para adicionar um novo serviço chamado AuthMessageSender, que será responsável pelo envio de SMS usando o Twilio. Vamos criar uma interface que o AuthMessageSender implementará.

public interface ISmsSender
    {
        Task SendSmsAsync(string number, string message);
    }

Vamos injetar isso no startup.cs.

services.AddTransient <ISmsSender, AuthMessageSender>();

O código de envio do SMS é bem simples. Simplesmente criamos um cliente do Twilio e chamamos o método MessagerReSource.Createasync para enviar SMS.

public Task SendSmsAsync(string number, string message)
{
              var sid = _twilioSettings.Value.Sid;
            var token = _twilioSettings.Value.Token;
            var from = _twilioSettings.Value.From;
            TwilioClient.Init(sid, token);
            MessageResource.CreateAsync(new PhoneNumber(number),
                from: new PhoneNumber(from),
                body: message);
            return Task.FromResult(0);
}

Modificaremos o método de login para verificar se o usuário ativou o 2FA para que possamos redirecioná -los para verificação de código. Adicionar verifyCode.cshtml em quickstart/views:

2FA em ação

Modifique o método da conta/login para gerar e enviar o código de verificação após a verificação de credenciais. Não queremos concluir a solicitação de sinal neste momento. Portanto, a chamada do método httpContext.SigninaSync será removida e, em vez disso, simplesmente geraremos um código de verificação aleatório e o armazenaremos (atualmente estamos usando o armazenamento na memória para fins de demonstração).

[HttpPost]

[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string button)
Captura de tela de código

E então redirecionaremos o usuário para a página “VerificoCode”, onde a verificação do código será executada e o fluxo de trabalho de assinatura será concluído. Na ação verificada, estamos simplesmente buscando informações de usuário e código da memória e combinando com o código fornecido.

Captura de tela de código

Se o código for correspondido, simplesmente concluímos a solicitação de autenticação, invocando o método SigninaSync e redirecionando o usuário para a página autorizada. Vamos executar o projeto Etapa -1: O usuário fornece credenciais.

2FadeMo - Login

Etapa 2: Credenciais são verificadas e um código de verificação é enviado:

2FadeMo - SMS

Etapa 3: o usuário verifica o código correto.

2FadeMo - Verifique o código

O código da etapa 4 é verificado e a autenticação 2FA foi concluída.

2FadeMo - Página autorizada

Conclusão:

Neste artigo, aprendemos sobre o 2FA e sua implementação no .NET5 usando o IdentityServer4 e o Twilio. Você pode baixar o código de exemplo usado neste artigo deste repo. O uso de SMS para 2FA certamente fortalece sua segurança, mas ainda é vulnerável a SIM Swap Attacks. Portanto, os pesquisadores de segurança estão incentivando o 2FA a usar outras abordagens, como aplicativos autenticadores e chaves de segurança (Yubikey) que não podem ser interceptadas na rede telefônica. Aprenderemos mais sobre isso em um próximo artigo - fique atento!