Tuesday, July 16, 2013

Janela para entrada de dados confidenciais no Windows Phone

?

Line 1: Line 1:
?

[[Category:Lang-Portuguese]][[Category:UI on Windows Phone]][[Category:XAML]][[Category:Code Examples]][[Category:Security on Windows Phone]][[Category:Windows Phone 7.5]][[Category:Windows Phone 8]][[Category:Windows Phone]]

+

[[Category:Lang-Portuguese]][[Category:UI on Windows Phone]][[Category:Security on Windows Phone]][[Category:Windows Phone 7.5]][[Category:Windows Phone 8]][[Category:XAML]][[Category:Code Examples]]

?

{{Abstract| Algumas aplica??es precisam de acesso a dados confidenciais. Este artigo mostra como criar um janela de para fornecer dados confidenciais (como senhas) para a aplica??o.}} ?

?

{{Abstract| Algumas aplica??es precisam de acesso a dados confidenciais. Este artigo mostra como criar um janela de para fornecer dados confidenciais (como senhas) para a aplica??o.}} ?

??

Latest revision as of 14:26, 15 July 2013

Algumas aplica??es precisam de acesso a dados confidenciais. Este artigo mostra como criar um janela de para fornecer dados confidenciais (como senhas) para a aplica??o.

[edit] Introdu??o

Implementando uma p?gina de acesso para aplica??es de Windows Phone pode causar v?rios problemas: ? dif?cil de controlar a navigation stack e cumprir os requisitos de armazenamento relativas ? navega??o. Isto ? em parte porque n?o existe um m?todo para sair de um aplicativo no caso de uma senha errada. ? necess?rio remover a p?gina de login da pilha p?gina (usando NavigationService.RemoveBackEntry, um m?todo adicionado na vers?o Mango) de modo que o aplicativo pode ser encerrado sem ultrapassar a p?gina de login novamente ao pressionar o bot?o de volta.

[edit] Solu??o

Uma maneira mais f?cil ? usar um pop-up criados dinamicamente no topo da p?gina principal.

Loginscreen.png

Tal como ilustrado abaixo, o pop-up ? criado no "event's handler" Loaded da p?gina:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (!app.IsAuthenticated)
{
p = new Popup();
LayoutRoot.Children.Add(p);
ApplicationBar.IsVisible = false;
?
// Set where the popup will show up on the screen.
p.VerticalOffset = 60;
p.HorizontalOffset = 25;
?
Border border = new Border();
border.BorderBrush = new SolidColorBrush(Colors.White);
border.BorderThickness = new Thickness(5.0);
?
StackPanel panel1 = new StackPanel();
panel1.Background = new SolidColorBrush(Colors.Black);
panel1.Width = LayoutRoot.ActualWidth - 2 * p.HorizontalOffset;
?
Button button1 = new Button();
button1.Content = "OK";
button1.Margin = new Thickness(5.0);
button1.Click += new RoutedEventHandler(loginbutton_Click);
TextBlock textblock1 = new TextBlock();
textblock1.TextWrapping = TextWrapping.Wrap;
if (app.FirstRun)
textblock1.Text = "Please enter your choice of a password:";
else
textblock1.Text = "Please enter your password";
textblock1.Margin = new Thickness(5.0);
textblock1.FontSize = 30;
textblock1.Foreground = new SolidColorBrush(Colors.White);
pb = new PasswordBox();
pb.KeyDown += new KeyEventHandler(pb_KeyDown);
panel1.Children.Add(textblock1);
panel1.Children.Add(pb);
if (app.FirstRun)
{
TextBlock textblock2 = new TextBlock();
textblock2.TextWrapping = textblock1.TextWrapping;
textblock2.Margin = textblock1.Margin;
textblock2.FontSize = textblock1.FontSize;
textblock2.Foreground = textblock1.Foreground;
textblock2.Text = "Please repeat the password";
pb2 = new PasswordBox();
panel1.Children.Add(textblock2);
panel1.Children.Add(pb2);
}
panel1.Children.Add(button1);
border.Child = panel1;
?
// Set the Child property of Popup to the border
// which contains a stackpanel, textblock and button.
p.Child = border;
?
// Open the popup.
p.IsOpen = true;
pb.Focus();
}
else
// Set the data context of the listbox control to the sample data
DataContext = App.ViewModel;
}

A verifica??o da password acontece no login, isto ?, quando o loginbutton_Click ocorre (o bot?o Ok ? precisionado). Se a palavra-passe n?o estiver correcta o utilizador pode voltar a inserir a palavra-passe.

private void loginbutton_Click(object sender, RoutedEventArgs e)
{
// Close the popup.
p.IsOpen = false;
if (app.FirstRun)
{
if (!pb.Password.Equals(pb2.Password))
{
MessageBox.Show("The passwords do not match. Please try again.");
p.IsOpen = true;
pb.Password = "";
pb2.Password = "";
pb.Focus();
return;
}
app.PwdHash = CryptoUtil.GetHashCode(pb.Password);
app.IsAuthenticated = true;
app.FirstRun = false;
App.ViewModel.LoadData();
}
else
app.IsAuthenticated = CryptoUtil.GetHashCode(pb.Password).CompareTo(app.PwdHash) == 0;
?
if (app.IsAuthenticated)
{
DataContext = App.ViewModel;
ApplicationBar.IsVisible = true;
}
else
{
tb = new TextBlock();
tb.Text = "Wrong password.";
tb.FontSize = 36;
tb.Foreground = new SolidColorBrush(Colors.Red);
tb.Margin = new Thickness(12);
tb.SetValue(Grid.RowProperty, 2);
LayoutRoot.Children.Add(tb);
ApplicationBar.IsVisible = true;
(ApplicationBar.MenuItems[0] as ApplicationBarMenuItem).IsEnabled = false;
?
DataContext = null;
}
}

Pressionando a tecla "Enter", o m?todo loginbutton_Click ser? invocado e o login ser? efetuado.

void pb_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter) // Enter equal OK button
loginbutton_Click(this, new RoutedEventArgs());
}

Quando a tecla "Back" ? pressionada e o popup est? aberta, a palavra passe ser? verificada.

private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
if (p.IsOpen)
{ // if the popup is still there... emulate OK button click
loginbutton_Click(this, new RoutedEventArgs());
e.Cancel = true;
}
}

Durante a primeira vez que a aplica??o corre, a palavra passe ? requerida ao utilizador. A palavra-passe em si n?o ? armazenado no aplicativo, mas sim do c?digo hash ? armazenado. Em sucessivas ocasi?es, o hash para a senha digitada ? calculado e comparado com o valor hash armazenado. Consultar How to encrypt your application data in Windows Phone (*)

[edit] C?digo exemplo

O c?digo para a janela de acesso foi adicionado ao exemplo Media:EncryptionSample.zip do artigo How to encrypt your application data in Windows Phone (*).

(*) Artigo dispon?vel apenas em ingl?s.

Source: http://www.developer.nokia.com/Community/Wiki/index.php?title=Janela_para_entrada_de_dados_confidenciais_no_Windows_Phone&diff=202469&oldid=202460

oklahoma city bombing Audrie Pott Bombing In Boston Rebel Wilson Patriots Day aubrey plaza boston marathon

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.