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 :
Visual Studio Community 2015 (é grátis)
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: