Android:存储用户名和密码?
如果我想存储在Android应用程序中使用的用户名和密码,最好的办法是什么? 是通过首选项屏幕(但如果用户错过了这个?),或popup一个对话框,并要求用户的凭据? 如果是这样,我必须保持申请状态。 我将如何做到这一点?
我见过的大多数Android和iPhone应用程序都使用初始屏幕或对话框来索取凭证。 我认为用户经常需要重新input他们的名字/密码是很麻烦的,所以从可用性的angular度来看,存储这些信息是有意义的。
( Android开发指南 )的build议是:
一般来说,我们build议最大限度地减less询问用户凭据的频率 – 使networking钓鱼攻击更加明显,并且不太可能成功。 而是使用授权令牌并刷新它。
在可能的情况下,用户名和密码不应该存储在设备上。 而是使用用户提供的用户名和密码执行初始身份validation,然后使用短暂的特定于服务的授权令牌。
使用AccountManger是存储凭证的最佳select。 SampleSyncAdapter提供了一个如何使用它的例子。
如果出于某种原因,这不是您的select,您可以使用首选项机制退回到持久性凭据。 其他应用程序将无法访问您的偏好,所以用户的信息不容易暴露。
您应该使用Android AccountManager 。 这是专门为这种情况build立的。 这有点麻烦,但是它所做的一件事情是,如果SIM卡改变,则本地凭证无效,所以如果有人在你的手机上刷了一个新的SIM,那么你的凭证就不会受到威胁。
这也为用户提供了一种快速而简单的方法,可以从一个地方访问(并可能删除)他们在设备上拥有的任何帐户的存储凭据。
SampleSyncAdapter(就像@Miguel提到的)是一个使用存储帐户凭证的例子。
我认为保护你的证书的最好办法是首先考虑把密码encryption存储在account.db文件中,这个文件在非root用户的设备中是不容易得到的,而且在rootd设备的情况下,黑客必须要密钥才能解密它。
其他选项是像Gmail一样进行所有的authentication。 在与Gmail服务器的第一次authentication之后。 你有密码的情况下使用的validation令牌。 该标记将以纯文本forms存储。如果您从服务器更改密码,则该标记可能是错误的。
我build议您启用双因素身份validation并为您的设备创build设备特定的密码。 丢失设备后,您只需要禁用该设备。
您也可以查看SDK中的SampleSyncAdapter示例。 它可以帮助你。
如果您担心在SharedPreferences中将密码存储为明文,请参阅在Android应用程序中存储用户设置的最佳方式是什么?
看看这个从Android开发人员的post,这可能有助于提高您的Android应用程序中存储的数据的安全性。
使用密码学安全地存储凭证
随着新的(Android 6.0)指纹硬件和API,你可以做这个 github示例应用程序。
这些排名按照难度来打破你的隐藏信息 。
-
以明文forms存储
-
使用对称密钥进行encryption存储
-
使用Android密钥库
-
使用不对称密钥进行encryption存储
来源: 哪里是在您的Android应用程序中存储密码的最佳地点
密钥库本身使用用户自己的locking屏幕密码/密码进行encryption,因此,当设备屏幕被locking时密钥库不可用。 请牢记这一点,如果你有一个后台服务,可能需要访问你的应用程序的秘密。
来源: 简单的使用Android Keystore来存储密码和其他敏感信息