Parte 2 código
Olá pessoal, baseado no que já vimos no artigo anteriormente Usando token como fator de autenticação hoje eu vou mostrar na prática como preparar a sua aplicação no uso do segundo fator de autenticação. É importante saber que o usuário pode escolher habilitar ou desabilitar no momento que ele quiser.
Esse exemplo é real e eu fiz ele no site www.udocs.me.
Utilizado
- Visual Studio
- Linguagem C#
- Banco de dados SQL Server
- Nuget package GoogleAuthenticator
Primeiro ponto
O usuário precisa logar com usuário e senha normalmente na aplicação. Depois que ele logar, é necessário entrar em uma página profile onde ele verificar qualquer informação sobre a própria conta. Nesta página você pode colocar a possibilidade de habilitar ou desabilitar o segundo fator de autenticação. No www.udocs.me foi criado no menu um link para o nome do usuário que aparece que é redirecionado para a página profile.
Segundo ponto
É importante utilizar um package do nuget chamado Google Authenticator para te ajudar no desenvolvimento do segundo fator de autenticação. Foi ele que eu utilizei para desenvolver. Vamos analisar o código 1.1.
Código 1.1 - setup
TwoFactorAuthenticator twoFacAuth = new TwoFactorAuthenticator();
var userUniqueKey = [chave_unica] + [chave_publica];
var setupInfo = twoFacAuth.GenerateSetupCode("seu_site", "user_name", userUniqueKey, 300, 300);
var image = setupInfo.QrCodeSetupImageUrl;
var manualCode = $"Manual code authentication:{setupInfo.ManualEntryKey}";
Note que a primeira linha foi criado apenas uma instância o objeto para ser utilizado depois.
É bom gerar uma chave única para o usuário e isso envolve uma chave privada, apenas a que o usuário possui, não se repete e uma chave pública utilizada para todos dentro do sistema. A junção dessas duas chaves, torna o sistema seguro para gerar o fator de autenticação.
O método utilizado para gerar o setup é o GenerateSetupCode
passando vários parâmetros e um deles é a chave criada para o usuário. O primeiro parâmetro é o nome do seu site para ser identificado facilmente no smartphone, o segundo é o nome do usuário, o terceiro o código único do usuário e os outros dois são o tamanho da imagem que deseja receber. Sim, isso porque uma imagem será gerada, um QR Code será gerado para que o usuário possa escanear com o seu smartphone.
Depois que gera o setup, é necessário pegar a imagem pela url. Então utilizamos a propriedade QrCodeSetupImageUrl
e colocamos na variável image.
Caso o usuário não queira utilizar a imagem, ele pode fazer o setup usando um código manual gerado através da propriedade ManualEntryKey
.
Basta agora você mostrar a imagem e o código na tela do usuário. Como estou utilizando dados reais, colocando a pele em risco, apaguei um pouco a imagem e o código gerado pelo site.
Veja a imagem 1.1 - Qr Code
Agora é necessário o usuário usar o smartphone, fazer download do Google Authenticator pela loja de aplicativos do seu celular. Basta escanear a imagem ou digitar o código manualmente no aplicativo. O aplicativo vai gerar um código que pode ser colocado no campo e depois disso, basta clicar no botão CHECK CODE mostrado na tela.
Terceiro ponto
Depois que o usuário ativa e começa a usar esse segundo fator de autenticação, é necessário ter no banco de dados uma informação falando que aquele usuário tem ativado o Google Authentication e no momento do login, o sistema precisa identificar e solicitar que usuário utilize o smartphone para coloca o código gerado de tempos em tempos.
Sim, toda vez o usuário depois de fazer login na aplicação com usuário e senha, ele precisa pegar o celular e digitar o código que aparece dentro do aplicativo.
Para não ficar muito extenso, vou mostrar a outra página no próximo artigo. Qualquer dúvida, pode entrar em contato comigo pelo Chat de atendimento ou pelo meu site www.mauriciojunior.org.