Aplicativos modernos

Autenticação e identidade nos aplicativos da Windows Store

Rachel Appel

Rachel AppelUm número incrível de aplicativos e sites agora exigem algum tipo de login ou credenciais. Um dos motivos é que vários deles personalizam a experiência com base nas preferências salvas do usuário. Como muitos sites e aplicativos exigem a entrada do usuário, você precisa tornar fácil para os usuários entrarem. Neste artigo, você aprenderá os fundamentos da autenticação de aplicativo na plataforma Windows habilitando a conta da Microsoft ou o logon de terceiros, assim como métodos de autenticação suplementares como o cartão inteligente ou a autenticação biométrica.

Autenticação de aplicativo moderno e identidade do usuário

Com muita frequência, reunir as credenciais do usuário é mais chato para o usuário do que uma experiência enriquecedora. Portanto, quando deseja armazenar as credenciais do usuário, você deseja fazer de forma que mantenha as coisas seguras e ainda mantenha a facilidade de utilização.

Usar um provedor de credenciais independente como a conta da Microsoft (anteriormente Windows Live ID), Facebook ou OAuth é uma ótima forma de confiar em uma entidade confiável para gerenciar e armazenar a informação do usuário. Isso ainda fornece aos usuários uma IU persistente individualizada. Além disso, vamos encarar—um usuário não lembra de todas as suas senhas, especialmente em sites e aplicativos que usa sem frequência. Pedir a um usuário para criar e lembrar de outro conjunto de credenciais apenas adiciona dificuldade a sua experiência. Isso apenas pode causar uma queda nas classificações na loja do seu aplicativo, que é o efeito contrário do que você deseja.

No lado do desenvolvedor, armazenar credenciais do usuário significa que você tem que criar mais códigos, testes e correções de bug do que faria se estivesse usando algo como o logon do Facebook. Também há a possibilidade de violações de segurança ao armazenar dados de logon nos bancos de dados locais. É possível diminuir essa tensão para os usuários e si próprio usando uma entidade confiável como Microsoft, Facebook, Twitter, OAuth ou qualquer serviço de credencial de terceiros confiável. O serviço armazena as credenciais do usuário e informações privadas usando algoritmos adequados. Portanto, permanece seguro. Tudo que você precisa fazer é realizar algumas chamadas para o API e ele faz todo o trabalho pesado.

Usando a conta da Microsoft

Ao usar uma conta da Microsoft, os usuários esperam que a experiência de logon seja semelhante e consistente com o logon do Windows. Em vez de criar seus próprios controles da IU para coletar a informação, você deve usar aqueles fornecidos com os APIs da conta da Microsoft. Felizmente, isso torna mais fácil codificar. A codificação da informação de logon é uma tarefa chata que você pode e deve abstrair com APIs como os APIs da conta da Microsoft.

Se você for exigir um logon, mostre a IU de logon ao iniciar o aplicativo. Se o usuário pode permanecer conectado entre as sessões ou não precisar logon, adicione isso às Configurações. Além disso, não esqueça de garantir que o usuário pode sair. Isso é tão fácil de esquecer, porque muitos usuários preferem permanecer conectados em sites e aplicativos favoritos.

Isso pode ser um problema se alguém precisar emprestar um telefone ou equipamento. Se ele entrar e não puder sair, a próxima pessoa pode usar o aplicativo e se passar por ele. Por outro lado, a primeira pessoa nunca poderá compartilhar seu equipamento porque não pode sair.

Certifique-se de manter o status de conectado onde um usuário possa facilmente ver em todas as telas do aplicativo. Isso não precisa ser uma atualização de texto chata. É possível mostrar o avatar da pessoa ou algumas fotos do seu armazenamento de fotos OneDrive (se estiver usando uma conta da Microsoft). Seja quanto criativo desejar, desde que o usuário possa ver e alterar seu status com facilidade. Uma técnica comum é mostrar a miniatura do avatar do usuário no canto superior direito do aplicativo.

Autenticação da conta da Microsoft

Usar a autenticação da conta da Microsoft fornece uma experiência de logon contínua para todos os serviços do Microsoft Live, como o OneDrive, Outlook.com, uma assinatura MSDN, Xbox e até equipamentos e aplicativos do Windows 8.

Para poder usar os serviços que podem conter informações privadas do usuário, você deve registrar o aplicativo com o Centro do Desenvolvedor da Microsoft online (bit.ly/1egpvHx). Fazer isso permite utilizar os serviços da conta da Microsoft em seu aplicativo para que você possa conectar os usuários aos vários recursos.

Como você está trabalhando com serviços que acessam dados pessoais, é necessário fornecer uma declaração de privacidade clara acessível com seu aplicativo. Se você precisa de ajuda para redigir uma política de privacidade, é possível usar myapppolicy.com ou w8privacy.azurewebsites.net para ajudá-lo a criar uma. Ao estabelecer uma política de privacidade, é possível exibi-la com um menu suspenso Configurações.

Por fim, é necessário fornecer o código para as pessoas entrarem e saírem. É possível fazer isso com um controle de menu suspenso que contém um botão de entrada (muda para um botão de saída ao entrar). Os botões iniciam caixas de diálogo para realizar as operações correspondentes de entrada ou saída. A Figura 1 mostra o XAML que cria um menu suspenso Configurações da Conta.

Figura 1 Este código cria um menu suspenso Configurações da Conta

<SettingsFlyout x:Class="App.Account" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" IconSource="Assets/SmallLogo.png" Title="Account" d:DesignWidth="346"> <StackPanel x:Name="accountSettings"> <Button x:Name="SignInButton" Click="SignInClick" Content="Sign in" /> </StackPanel> </SettingsFlyout>

Como você pode ver, é um controle com um botão. O botão é o que o usuário utilizará para iniciar a interface de logon. É uma prática comum colocar um botão de entrada no menu suspenso. Para saber mais sobre como criar o menu suspenso Configurações, consulte “Dominando controles e configurações nos aplicativos da Windows Store” (bit.ly/1hy7Fk2). O código que conecta os usuários no aplicativo do evento de clique do botão de entrada deve parecer com o seguinte:

private async void SignInButton_Click(object sender, RoutedEventArgs e) { LiveAuthClient authClient = new LiveAuthClient(); LiveLoginResult authResult = await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.basic"  }); if (authResult.Status == LiveConnectSessionStatus.Connected) { // Perform post authentication duties } }

Isso exibe a tela de entrada da conta da Microsoft (frequentemente chamada de página de permissão do logon), se o usuário ainda não entrou (consulte a Figura 2). Como você pode ver, não é necessário muito código para executar o processo de logon. É possível usar a propriedade Session do LiveAuthClient para consultar o status da sessão em todo aplicativo.

The Microsoft Account Sign-in Screen
Figura 2 A tela de entrada da conta da Microsoft

É possível realizar as mesmas atividades com HTML e JavaScript, mas as etapas são um pouco diferentes. Primeiro, referencie o SDK do Windows Live com o comando Adicionar Referência. Em seguida, como é comum no desenvolvimento HTML, referencie os scripts com a marca <script> no seu documento HTML, como a seguir:

<script src="///LiveSDKHTML/js/wl.js"></script>

No entanto, você pode desejar usar a versão de depuração durante o desenvolvimento. Neste caso, você pode usar a seguinte referência:

 

<script src="//js.live.net/v5.0/wl.debug.js"></script>

A Figura 3 contém o código WinJS que conecta um usuário. Você precisará chamar WL.init e WL.Event.subscribe para poder inicializar a conta da Microsoft, assim como se inscrever em um evento que ocorre depois do logon. Os aplicativos XAML não exigem essa inicialização. No evento de logon, é possível exibir o status de conexão ou fazer o que for necessário logo depois do logon.

Figura 3 O código WinJS que conecta o usuário

(function () { "use strict"; WL.init(); WL.Event.subscribe("auth.login", loginComplete); document.querySelector("#SignInButton").addEventListener("click", function () { login(); }); function loginComplete() { WinJS.log("User has signed in!") } function login() { var session = WL.getSession(); if (session) { WinJS.log("You are already signed in!") } else { WL.login({ scope: "wl.basic" }).then( function () { // Perform post authentication duties }, function (response) { WinJS.log("Could not connect, status = " + response.status); }); } } })();

O código na Figura 3 faz o mesmo que o XAML equivalente—realmente conecta um usuário. Independente da linguagem utilizada, o método wl.login exige que você seja aprovado em um escopo. Um escopo é um nível de permissão ou um escopo de onde e o que um aplicativo pode fazer em nome do usuário. Como você pode imaginar, escopos são controlados pelo usuário. É possível tentar fazer algo que deseja enquanto estiver como o usuário, mas o Tempo de Execução do Windows forçará você a obter a permissão do usuário antes de continuar.

Web Authentication Broker (OAuth)

Usar um serviço de credenciais de terceiros centralizado e objetivo como a conta da Microsoft, Facebook, Twitter, LinkedIn, OAuth e assim por diante é uma boa estratégia de autenticação. Os usuários provavelmente lembrarão de suas senhas para sites que visitam com mais frequência ou que gostam mais. Usar um autenticador de reputação também significa menos código de infraestrutura no qual você precisa focalizar e mais tempo de lógica de negócios ou trabalho de IU.

O Web Authentication Broker é uma forma fácil de realizar a autenticação. Com o Web Authentication Broker, você precisa lidar com os problemas de armazenar com segurança a informação do usuário. Em vez disso, você criptografa corretamente toda a informação pessoal. O Web Authentication Broker é um contato entre um aplicativo e um provedor de autenticação. Também habilita o logon único entre vários aplicativos.

Chame o Web Authentication Broker no código para recuperar e exibir uma caixa de diálogo ou página da Web de um serviço de autenticação específico como Facebook (consulte a Figura 4). A caixa de diálogo é a mesma tela de logon que o usuário veria normalmente ao entrar no site ou aplicativo do provedor. Na maioria dos casos, é possível personalizar para que pareça uma parte natural do seu aplicativo.

Figura 4 Entrando com o Web Authentication Broker

async public Task<string> WebAuthenticate(){ string startURL = "https://<providerendpoint>?client_ id=<clientid>&scope=<scopes>&response_type=token"; string endURL = "http://<appendpoint>"; System.Uri startURI = new System.Uri( "https://<providerendpoint>?client_ id=<clientid>&scope=<scopes>&response_type=token"); System.Uri endURI = new System.Uri( "http://<appendpoint>"); string result; try { var webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync( WebAuthenticationOptions.None, startURI, endURI); switch (webAuthenticationResult.ResponseStatus) { case WebAuthenticationStatus.Success: result = webAuthenticationResult.ResponseData.ToString(); break; case WebAuthenticationStatus.ErrorHttp: result = webAuthenticationResult.ResponseErrorDetail.ToString(); break; default: result = webAuthenticationResult.ResponseData.ToString(); break; } } catch (Exception ex) { result = ex.Message; } return result; }

Autenticação com cartão inteligente

A Microsoft usa a muito tempo cartões inteligentes como uma forma de autenticar conexões VPN nas redes da empresa, assim como fornecer acesso seguro a edifícios e outros recursos empresariais. Agora é possível incorporar facilmente cartões inteligentes em seu software. O namespace Windows.Devices.SmartCards contém classes como SmartCard e SmartCardConnection que permitem redigir o código para autenticar e gerenciar cartões inteligentes. Embora os cartões inteligentes possam parecer muito complicados, eles não são. Se você deseja verificar quais cartões estão localizados no leitor atualmente, por exemplo, é possível redigir um código semelhante ao seguinte:

string selector = SmartCardReader.GetDeviceSelector(); DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector); foreach (DeviceInformation device in devices) { SmartCardReader reader = await SmartCardReader.FromIdAsync(device.Id); IReadOnlyList<SmartCard> cards = await reader.FindAllCardsAsync(); }

Observe que Windows.Devices.DeviceInformation obtém informações sobre cada equipamento. No Windows, esta é uma forma padrão para consultar o hardware. O Tempo de Execução do Windows expõe vários objetos que se comunicam com o hardware que estavam indisponíveis anteriormente para desenvolvedores .NET.

Autenticação biométrica

Embora seja improvável que você possa usar outra forma de autenticação além da técnica de nome de usuário/senha padrão porque vários equipamentos e máquinas não suportam o hardware, é possível usar uma impressão digital registrada e armazenada para ler o software. É um ótimo recurso e muito útil para aqueles que podem ter necessidades de acessibilidade.

Considere o computador laptop Lenovo Carbon Touch X1. Este modelo tem um leitor de impressão digital integrado no laptop próximo ao teclado. Com a autenticação biométrica do Windows 8, é possível usar este tipo de autenticação. A Figura 5 mostra o código que você usaria para a autenticação biométrica.

Figura 5 Autenticação de impressão digital

var availability = await UserConsentVerifier.CheckAvailabilityAsync(); if (UserConsentVerifierAvailability.Available) { var consentResult = await UserConsentVerifier.RequestVerificationAsync(userMessage); } var consentResult = await UserConsentVerifier.RequestVerificationAsync(userMessage); switch (consentResult) { case UserConsentVerificationResult.Verified: returnMessage = "Fingerprint verified."; break; case UserConsentVerificationResult.DeviceBusy: returnMessage = "Biometric device is busy."; break; case UserConsentVerificationResult.DeviceNotPresent: returnMessage = "No biometric device found."; break; case UserConsentVerificationResult.NotConfiguredForUser: returnMessage = "The user has no fingerprints registered."; break; case UserConsentVerificationResult.RetriesExhausted: returnMessage = "Too many failed attempts."; break; case UserConsentVerificationResult.Canceled: returnMessage = "Fingerprint authentication canceled."; break; default: returnMessage = "Fingerprint authentication is currently unavailable."; break; }

O código na Figura 5 mostra a caixa de diálogo modal parecida com a da Figura 2, exceto que solicitará ao usuário para digitalizar seu dedo no dispositivo biométrico durante a chamada para CheckAvailabilityAsync. Quando o usuário digitalizar seu dedo, é possível consultar a permissão resultante para ver se é uma digitalização verificável.

Sair

Usando a conta da Microsoft, é possível fornecer uma experiência rica e consistente que integra continuamente no Windows 8. Agora você tem uma variedade de provedores de autenticação, que você deve usar antes de criar o seu próprio. Usando o Twitter, Facebook, Microsoft ou outros, eles já endereçaram os desafios e problemas fornecidos com o gerenciamento seguro da informação privada do usuário. Esses provedores também mantêm a segurança atualizada. Isso torna a validação de terceiros com reputação a melhor escolha para autenticação de aplicativos modernos.

A não ser que seja absolutamente necessário, não crie seus próprios algoritmos para armazenar informações privadas do usuário. Use um serviço como o Credential Locker se você precisa reter essa informação. É possível confiar nas credenciais do usuário com segurança com o Credential Locker. Isso fornece ao aplicativo uma forma de conectar um usuário entre sessões de aplicativo, porque as credenciais estão em um cofre na nuvem, que permite o roaming.

Roaming é um recurso indispensável quando seu aplicativo funciona em vários equipamentos (como tablet e telefone). Usando o Credential Locker, é possível bloquear com segurança as credenciais, mesmo passando elas entre versões do seu aplicativo, assim como a rede social ou outros sites externos. Além disso, você não precisa manter uma infraestrutura para armazenar as informações do usuário. É possível encontrar mais detalhes sobre o Credential Locker em bit.ly/1qFxfmG.

Com a autenticação aumentada como biometria, você tem certeza de ter os aplicativos com melhor classificação na loja. A IU é moderna, fácil de usar e tem todos os sinos e assobios. Nem todos os equipamentos terão os mesmos periféricos de autenticação, portanto, não confie em algo como a biometria como o único meio de autenticação.

Rachel Appel é consultora, autora, mentora e antiga funcionária da Microsoft com mais de 20 anos de experiência no setor de TI. Ela dá palestras em importantes congressos do setor, como o Visual Studio Live!, o DevConnections, o MIX e muitos outros. Sua experiência está ligada a soluções de desenvolvimento que alinham negócios e tecnologia com foco na pilha de desenvolvimento da Microsoft e em Web aberta. Para obter mais informações sobre a Appel, visite seu site em rachelappel.com.

Agradecemos ao seguinte especialista técnico da Microsoft pela revisão deste artigo: Frank La Vigne