Token – Xamarin.Forms

Neste artigo irei demonstrar como você pode criar um gerador de Token em suas aplicações Xamarin.Forms.

 

ADICIONANDO O NUGET PACKAGE

Clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”.

1

 

Digite “OtpSharp.Core” e selecione o plugin como demonstrado na imagem a seguir.

2

 

Selecione todos os projetos e clique no botão “Install”.

2

C# 

Comece criando as propriedades como demonstrado a seguir.

using OtpSharp;
using System.Threading;
using Xamarin.Forms;
namespace DemoToken
{
public partial class MainPage : ContentPage
{
public string Codigo
{
get => _codigo;
set
{
_codigo = value;
OnPropertyChanged();
}
}
private string _codigo;
public string Segundos
{
get => _segundos;
set
{
_segundos = value;
OnPropertyChanged();
}
}
private string _segundos;
private readonly byte[] secretKey;
private Totp totp;
private Timer timer;
public MainPage()
{
InitializeComponent();
}
}
}

view raw
MainPage.xaml.cs
hosted with ❤ by GitHub

 

No construtor, atribua a variável “secretKey” um identificador como demonstrado a seguir, para este exemplo chamei de “Id” mas pode ser o identificador de sua preferência. Recomendo que seja algo único para cada usuário, será utilizado para validação do Token.

public MainPage()
{
//Identificador
string Id = "100";
InitializeComponent();
BindingContext = this;
secretKey = Encoding.UTF8.GetBytes(Id);
}

view raw
MainPage.xaml.cs
hosted with ❤ by GitHub

 

Em seguida crie o método Callback que será responsável na geração do Token e no controle do tempo de validade. Também sobrescreva os seguintes métodos:

  • OnAppearing – Instancie um timer para realizar chamadas ao método Callback.
  • OnDisappearing – Descarte o timer.
public void Callback(object state)
{
totp = new Totp(secretKey);
Codigo = totp.ComputeTotp();
var remainingTime = totp.RemainingSeconds();
Segundos = $"00:{remainingTime:00}";
}
protected override void OnAppearing()
{
base.OnAppearing();
timer = new Timer(Callback, null, 0, 1000);
}
protected override void OnDisappearing()
{
timer.Dispose();
base.OnDisappearing();
}

view raw
MainPage.xaml.cs
hosted with ❤ by GitHub

Xaml

Para visualização crie duas Labels para demonstrar os valores das variáveis Codigo e Segundos.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:DemoToken"
x:Class="DemoToken.MainPage">
<StackLayout Padding="10">
<Label Text="{Binding Codigo}"
FontSize="64" TextColor="Blue"
HorizontalTextAlignment="Center"
HorizontalOptions="CenterAndExpand"/>
<Label Text="{Binding Segundos}"
FontSize="11" TextColor="Black"
HorizontalTextAlignment="Center"
HorizontalOptions="CenterAndExpand"/>
</StackLayout>
</ContentPage>

view raw
MainPage.xaml
hosted with ❤ by GitHub

Resultado

screenshot-1538967985231

Validando o Token

Para realizar a validação do Token,  utilize o método VerifyTotp como demonstrado a seguir. Ele irá retornar um boolean, sendo True para válido e False para inválido.

long ResultOut = 0;
var otp = new Totp(Encoding.UTF8.GetBytes(Id));
bool valid = otp.VerifyTotp(Codigo, out ResultOut, null);

view raw
VerifyToken.cs
hosted with ❤ by GitHub

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s