Android:存储用户名和密码?

时间:2009-12-18 00:11:49

标签: android authentication storage credentials

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

9 个答案:

答案 0 :(得分:107)

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

Android dev guide)的建议是:

  

一般情况下,我们建议尽量减少询问用户的频率   凭据 - 使网络钓鱼攻击更加显着,更少   可能会成功。而是使用授权令牌和   刷新它。

     

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

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

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:7)

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

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

最后一个选项我建议你启用2-Factor Authentication&为您的设备创建设备专用密码。丢失设备后,您只需要禁用该设备。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

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

Using Cryptography to Store Credentials Safely

答案 6 :(得分:2)

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

答案 7 :(得分:2)

这些按排名隐藏信息的顺序排列

  1. 以明文形式存储

  2. 使用对称密钥加密存储

  3. 使用Android密钥库

  4. 使用非对称密钥加密存储

  5. 来源: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

答案 8 :(得分:1)

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

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