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?
- Como funciona o 2FA?
- 2FA e autenticação multifatorial
- Desvantagens do uso do 2FA
- Implementando 2FA em .NET5 Primeiro, vamos entender o que é 2FA e por que ele precisa ser parte integrante de todos os aplicativos da web modernos.
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:
- O aplicativo envia um código de verificação frequentemente chamado OTP (senhas únicas) para o seu endereço de e-mail.
- O código é entregue como uma mensagem de texto no seu telefone.
- 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:
- Inscreva -se
- Verifique sua conta fornecendo um número de telefone válido. Depois que sua conta for verificada, você poderá usar o painel do console.
- Copie sua conta SID e autentique o token do painel.
- 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.
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.
Agora, integraremos o IdentityServer4, Pacotes Twilio da Nuget.
Install -Package IdentityServer4 -version 4.1.1
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:
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
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 _
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.
- Clique com a direita no projeto e adicione os segredos do usuário com a configuração do Twilio (Sid, Token, PhoneNumber)
- 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:
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)
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.
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.
Etapa 2: Credenciais são verificadas e um código de verificação é enviado:
Etapa 3: o usuário verifica o código correto.
O código da etapa 4 é verificado e a autenticação 2FA foi concluída.
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!