ASP .NET 5 - Two-factor Authentication com SMS usando ASP .NET Identity


  Neste tutorial vou mostrar como configurar e habilitar a utilização do recurso Two-factor authentication (2FA) usando SMS em uma aplicação ASP .NET 5 com ASP .NET Identity.

A verificação em duas etapas foi a solução que os serviços online encontraram para aumentar a segurança das contas dos usuários e evitar que elas sejam usadas por terceiros.

Two-factor authentication ou autenticação em duas etapas (também conhecida como 2FA) é uma tecnologia patenteada em 1984 que proporciona a identificação de usuários por meio da combinação de dois componentes diferentes.

Esses componentes podem ser algo que o usuário conhece, algo que o usuário possui ou algo que é inseparável do usuário. Um exemplo é o saque em caixa eletrônico. Apenas a combinação correta do cartão bancário (algo que o utilizador possui) e um PIN (número de identificação pessoal, ou seja, algo que o utilizador conhece) permite que a transação seja realizada. (wikipédia)

Assim , com a verificação em duas etapas, além de informar o nome de usuário e senha é preciso utilizar informações adicionais para obter o acesso ao serviço, como na utilização de códigos em dispositivos móveis por SMS ou geradores de acesso pelo aplicativo, como é o caso do Facebook.

O ASP .NET Identity já trás praticamente tudo pronto e permite configurar e habilitar o uso desse recurso em aplicações ASP .NET, e, é isso que veremos neste tutorial.

Recursos usados :

Criando um novo projeto ASP .NET 5

Abra o VS Community 2015 e clique em New Project;

A seguir selecione Visual C# -> ASP .NET Web Application;

Informe o nome Asp5_twoFactor e clique no botão OK;

A seguir selecione o template Web Application e selecione a autenticação Individual User Accounts e clique no botão OK;

Será criado um projeto contendo a estrutura de pastas criadas pelo framework conforme mostra a figura abaixo:

Executando o projeto iremos obter o seguinte resultado no navegador:

Configurando o SMS para a autenticação em duas etapas

Para realizar uma etapa da autenticação vamos precisar de um serviço SMS e neste tutorial vamos usar o Twilio.

Você deve criar uma conta no Twilio e obter as credenciais para poder usar a API do Twilio:

Atenção ! O envio de SMS tem um custo que pode ser visto neste link: https://www.twilio.com/sms/pricing

No dia em que esse artigo foi escrito o valor era:

No site do Twilio você tem acesso a documentação  que mostra como implementar a API para a 2FA usando C# neste link: https://www.twilio.com/docs/howto/walkthrough/two-factor-authentication/csharp/mvc

Após criar a sua conta e obter as credenciais (Account SID e Auth Token) e o seu número de telefone Twilio vamos incluir o pacote do Twilio em nosso projeto via Nuget.

No menu Tools clique em Nuget Package Manager -> Manage Nuget Packages for solution;

Selecione o pacote Twilio e clique no botão Install;

Alerta ! Se você dar um build no seu projeto agora vai receber erros de compilação. Isso ocorre porque o Twilio não tem um pacote para dnxcore50. Para resolver isso faça o seguinte:

1- Abra o arquivo project.json do projeto e remova "dnxcore50" do item "frameworks" :

Agora salve e compile novamente o projeto. Os erros devem desaparecer.

A seguir, na pasta Services altere o código da classe SendSmsAsync() do arquivo MessageServices.cs conforme abaixo:

 public Task SendSmsAsync(string number, string message)
  {
     // Plug in your SMS service here to send a text message.
      var twilio = new TwilioRestClient("_seu_Sid_Twilio_", "_seu_Token_Twilio_");
     var result = twilio.SendMessage("_seu_fone_Twilio_", number, message);
     return Task.FromResult(0);
 }

Neste código você deverá informar o seu número de telefone Twilio e as suas credenciais obtidas no site da Twilio.

Obs: Nunca utilize dados armazenados no seu código fonte. Isso foi feito aqui para simplificar o tutorial.

Habilitando a autenticação em duas etapas

Agora vamos habilitar o serviço de autenticação em duas etapas em nosso projeto.

Abra a view Index.cshtml na pasta /Views/Manage e descomente as linhas de código para adicionar um número de telefone para uma conta de usuário:

Descomente também, no mesmo arquivo, as linhas de código que permitem habilitar/desabilitar o recurso para uma conta de usuário :

Se desejar traduzir os textos para o português fique a vontade. Eu traduzi boa parte dos textos mas mesmo assim escapou alguns.

Executando o projeto com autenticação em duas etapas

Agora é só alegria...

Vamos executar o projeto e mostrar o fluxo de funcionamento do recurso autenticação em duas etapas:

1- Rode o projeto e registre um novo usuário:

2- Clique no nome do usuário para chamar a action Index do controlador Manage e exibir a opções para gerenciar a conta do usuário:

3- Clique no link Adicionar para Incluir um número de telefone.

Inclua o número e clique no botão - Enviar código de verificação:

4- Você receberá uma mensagem com o código de verificação no seu telefone. Informe este código para confirmar o número e clique em Submeter:

5- A view Manage vai mostrar que o número de telefone foi incluído com sucesso:

6- Habilite a autenticação em duas etapas clicando no link Habilitar :

7- Faça o logoff e a seguir faça o login com as credenciais do usuário que você registrou incialmente:

8- Agora, como ativamos a autenticação em duas etapas, temos outra etapa de verificação. Neste caso temos um número de telefone verificado e podemos usá-lo  para verificar a identidade. 

Selecione Phone e clique em Submeter:

Nota: você pode incluir outros provedores de autenticação

9- Você receberá um SMS com o código de verificação. Informe-o.

Clicando em Lembrar esse navegador? fará com que você não tenha precise repetir esse processo com esse computador e com esse navegador.

Pronto ! Você esta logado na aplicação após concluir a segunda etapa da autenticação com sucesso.

Você percebeu como é simples implementar a autenticação em duas etapas usando os recursos da ASP .NET Identity em um projeto ASP .NET 5.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti