182

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

4

9 回答 9

123

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

Android 开发指南)的建议是:

一般来说,我们建议尽量减少询问用户凭据的频率——以使网络钓鱼攻击更加明显,并且不太可能成功。而是使用授权令牌并刷新它。

在可能的情况下,用户名和密码不应存储在设备上。相反,使用用户提供的用户名和密码执行初始身份验证,然后使用短暂的、特定于服务的授权令牌。

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

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

于 2009-12-18T00:24:29.717 回答
9

您应该使用 Android AccountManager。它是专门为这种情况而设计的。这有点麻烦,但它所做的一件事就是在 SIM 卡发生变化时使本地凭据失效,因此,如果有人刷你的手机并将新的 SIM 卡放入其中,你的凭据不会受到损害。

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

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

于 2012-04-04T18:02:59.870 回答
8

I think the best way to secure your credential is to first think of storing the Password with encryption in the account.db file which couldn't be easily available in non rooted devices and in case of rooted device the hacker must need the key to decrypt it.

Other option is do all your authentication like the way Gmail is doing. after the first authentication with the Gmail server . you got the Auth Token that would be use in case of your password . that token would be store in plain text.this token could be false in case you change the password from Server.

the last option I'd recommend you to enable 2-Factor Authentication & create Device Specific Password for your device. After losing device, all you need is to disable that device.

于 2012-12-12T11:59:16.533 回答
3

如果您担心将密码作为明文存储在 SharedPreferences 中,请查看在 Android 应用程序中存储用户设置的最合适方法是什么。

于 2011-06-18T14:42:33.073 回答
2

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

使用密码学安全地存储凭证

于 2013-06-18T10:44:47.020 回答
2

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

于 2010-08-21T20:19:38.500 回答
2

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

于 2015-11-02T08:12:21.993 回答
2

这些是按难度顺序排列的,以打破你的隐藏信息

  1. 以明文形式存储

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

  3. 使用 Android 密钥库

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

来源:在您的 Android 应用中存储密码的最佳位置在哪里

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

来源:简单使用 Android Keystore 存储密码和其他敏感信息

于 2017-02-24T11:10:24.220 回答
1

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

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

于 2013-05-02T18:49:16.997 回答