存储用户名和密码?

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

220960 次浏览

我见过的大多数 Android 和 iPhone 应用程序使用初始屏幕或对话框来要求凭证。我认为用户经常需要重新输入他们的名字/密码是很麻烦的,所以从可用性的角度来看,存储这些信息是有意义的。

(Android 开发指南)的建议是:

一般来说,我们建议尽量减少询问用户的频率 证书——让网络钓鱼攻击更加引人注目,而且不那么引人注目 取而代之的是使用授权令牌和 刷新一下。

在可能的情况下,用户名和密码不应该存储在 相反,使用用户名和 用户提供的密码,然后使用一个短命的, 特定于服务的授权令牌。

使用 会计经理是存储凭据的最佳选择。SampleSyncAdapter提供了一个如何使用它的示例。

如果由于某种原因,您不能选择这个方法,那么可以使用 偏好机制回到持久化凭据。其他应用程序将无法访问您的首选项,因此用户的信息不容易公开。

您也可以查看来自 SDK 的 SampleSyncAdapter示例,它可能会对您有所帮助。

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

你应该使用 Android 会计经理。这是为这种情况特别设计的。这有点麻烦,但是它的功能之一就是当 SIM 卡发生变化时会使本地凭证失效,所以如果有人在你的手机上刷新了一个新的 SIM 卡,你的凭证就不会被破坏。

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

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

我认为保护你的证书的最好方法是首先考虑将密码加密存储在 Account. db 文件中,这在非根设备中不容易获得,而在根设备情况下,黑客必须需要密钥来解密它。

另一种选择是像 Gmail 那样进行所有的认证。在第一次与 Gmail 服务器验证之后。您得到了在密码情况下使用的 Auth 令牌。该令牌将以纯文本形式存储。如果您从 Server 更改密码,则此令牌可能为 false。

最后一个选项,我建议您启用双因素身份验证并为您的设备创建设备特定密码。丢失设备后,你只需要关闭那个设备。

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

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

看看这篇来自 Android 开发者的文章,它可能有助于提高 Android 应用程序中存储数据的安全性。

利用加密技术安全存储凭证

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

它们在 破解隐藏信息的难度顺序中排名。

  1. 以明文形式储存

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

  3. 使用 Android Keystore

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

来源: 在你的 Android 应用程序中存储密码的最佳位置是哪里

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

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