Android:存储用户名和密码?

问题描述 投票:164回答:9

如果我想存储要在Android应用程序中使用的用户名和密码,那么最好的方法是什么?是通过首选项屏幕(但如果用户错过了该怎么办?),或弹出一个对话框并询问用户凭据?如果是这样,我必须维护应用程序的状态。我该怎么做?

android authentication storage credentials
9个回答
108
投票

我见过的大多数Android和iPhone应用都使用初始屏幕或对话框来询问凭据。我认为用户必须经常重新输入他们的名字/密码是很麻烦的,因此从可用性角度来看,存储这些信息是有意义的。

Android dev guide)的建议是:

通常,我们建议尽量减少要求用户凭据的频率 - 使网络钓鱼攻击更加显着,并且不太可能成功。而是使用授权令牌并刷新它。

如果可能,用户名和密码不应存储在设备上。而是使用用户提供的用户名和密码执行初始身份验证,然后使用短期服务特定的授权令牌。

使用AccountManger是存储凭据的最佳选择。 SampleSyncAdapter提供了如何使用它的示例。

如果由于某种原因这不是您的选项,您可以使用Preferences机制回退到持久凭据。其他应用程序将无法访问您的首选项,因此不容易公开用户的信息。


8
投票

你应该使用Android AccountManager。它是专为此方案而构建的。这有点麻烦,但如果SIM卡发生变化,它所做的一件事就是使本地凭证失效,所以如果有人刷你的手机并在其中抛出一个新的SIM卡,你的凭证就不会受到损害。

这也为用户提供了一种快速简便的方法,可以从一个位置访问(并可能删除)他们在设备上拥有的任何帐户的存储凭据。

SampleSyncAdapter(如提到的@Miguel)是一个使用存储帐户凭据的示例。


7
投票

我认为保护凭证的最佳方法是首先考虑将密码加密存储在account.db文件中,这在非root设备中是不容易获得的,如果是root设备,则黑客必须需要密钥才能解密它。

其他选项是像Gmail一样执行所有身份验证。首次使用Gmail服务器进行身份验证后。你有密码时使用的Auth令牌。该令牌将以纯文本格式存储。如果您从服务器更改密码,则此令牌可能为false。

最后一个选项我建议您启用双因素身份验证并为您的设备创建设备专用密码。丢失设备后,您只需要禁用该设备。


3
投票

如果您担心在SharedPreferences中将密码存储为明文,请查看What is the most appropriate way to store user settings in Android application


2
投票

您还可以查看SDK中的SampleSyncAdapter示例。它可能会帮助你。


2
投票

从android-developers看这篇文章,这可能有助于提高Android应用程序中存储数据的安全性。

Using Cryptography to Store Credentials Safely


2
投票

使用新的(Android 6.0)指纹硬件和API,您可以像在this github示例应用程序中那样执行此操作。


2
投票

这些按照难以破坏隐藏信息的顺序排列。

  1. 以明文形式存储
  2. 使用对称密钥加密存储
  3. 使用Android Keystore
  4. 使用非对称密钥加密存储

来源:Where is the best place to store a password in your Android app

密钥库本身使用用户自己的锁屏密码加密,因此,当设备屏幕被锁定时,密钥库不可用。如果您有可能需要访问应用程序机密的后台服务,请记住这一点。

来源:Simple use the Android Keystore to store passwords and other sensitive information


1
投票

http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html的信息是一个相当务实的,但基于“使用 - 隐藏 - android-apis”的方法。当你真的无法在设备上本地存储凭据/密码时,需要考虑这一点。

我还在https://gist.github.com/kbsriram/5503519创建了一个清理的想法,这可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.