Se eu quiser armazenar o nome de usuário e a senha a serem usados em um aplicativo Android, qual é a melhor maneira de fazer isso? É através da tela de preferências (mas e se o usuário perder isso?), Ou abrir uma caixa de diálogo e solicitar credenciais ao usuário? Nesse caso, tenho que manter o estado do aplicativo. Como eu faria isso?
178
Respostas:
A maioria dos aplicativos para Android e iPhone que eu já vi usa uma tela ou caixa de diálogo inicial para solicitar credenciais. Eu acho que é complicado para o usuário ter que digitar novamente seu nome / senha com frequência, então armazenar essas informações faz sentido do ponto de vista da usabilidade.
O conselho do ( Android dev guide ) é:
Usar o AccountManger é a melhor opção para armazenar credenciais. O SampleSyncAdapter fornece um exemplo de como usá-lo.
Se isso não for uma opção para você, por algum motivo, você poderá voltar a credenciais persistentes usando o mecanismo Preferências . Outros aplicativos não poderão acessar suas preferências, portanto, as informações do usuário não são facilmente expostas.
fonte
AccountManager
(de acordo com a minha resposta e a @ Miguel de maneira indireta) e alguém pegar o telefone GSM, precisará continuar usando o SIM para ter acesso às suas contas, pois isso invalidará as credenciais armazenadas. quando o SIM mudar.Você deve usar o Android AccountManager . Foi desenvolvido especificamente para esse cenário. É um pouco complicado, mas uma das coisas que faz é invalidar as credenciais locais se o cartão SIM mudar, por isso, se alguém roubar seu telefone e lançar um novo SIM, suas credenciais não serão comprometidas.
Isso também oferece ao usuário uma maneira rápida e fácil de acessar (e potencialmente excluir) as credenciais armazenadas de qualquer conta que ele possua no dispositivo, tudo em um só local.
O SampleSyncAdapter (como o @Miguel mencionado) é um exemplo que utiliza credenciais da conta armazenada.
fonte
Eu acho que a melhor maneira de proteger sua credencial é primeiro pensar em armazenar a senha com criptografia no arquivo account.db, que não poderia estar facilmente disponível em dispositivos não raiz e, no caso de dispositivo raiz, o hacker precisa da chave para descriptografar isto.
Outra opção é fazer toda a sua autenticação, como está o Gmail. após a primeira autenticação com o servidor do Gmail. você obteve o token de autenticação que seria usado no caso de sua senha. esse token seria armazenado em texto sem formatação. esse token poderia ser falso caso você alterasse a senha do servidor.
a última opção, recomendo que você ative a autenticação de dois fatores e crie uma senha específica para o dispositivo. Depois de perder o dispositivo, tudo o que você precisa é desativar esse dispositivo.
fonte
Veja qual é a maneira mais apropriada de armazenar as configurações do usuário no aplicativo Android se você estiver preocupado em armazenar senhas como texto não criptografado em SharedPreferences.
fonte
Você também pode ver o exemplo SampleSyncAdapter no SDK. Isso pode ajudá-lo.
fonte
Dê uma olhada nesta postagem de desenvolvedores do Android, que pode ajudar a aumentar a segurança dos dados armazenados no seu aplicativo Android.
Usando criptografia para armazenar credenciais com segurança
fonte
Com o novo hardware e API (Android 6.0) de impressão digital, você pode fazê-lo como neste aplicativo de exemplo do github.
fonte
Eles são classificados em ordem de dificuldade para quebrar suas informações ocultas .
Armazenar em texto não criptografado
Armazenar criptografado usando uma chave simétrica
Usando o Keystore Android
Armazenar criptografado usando chaves assimétricas
fonte: onde é o melhor lugar para armazenar uma senha no seu aplicativo Android
fonte: use o Android Keystore para armazenar senhas e outras informações confidenciais
fonte
As informações em http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html são uma abordagem bastante pragmática, mas baseada em "usa-oculto-android-apis". É algo a considerar quando você realmente não consegue armazenar credenciais / senhas localmente no dispositivo.
Também criei uma essência limpa dessa ideia em https://gist.github.com/kbsriram/5503519 que pode ser útil.
fonte