Android:存储用户名和密码?

Leg*_*end 174 authentication storage android credentials

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

Eri*_*ine 113

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

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

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

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

使用AccountManger是存储凭据的最佳选择.该SampleSyncAdapter提供了如何使用它的一个例子.

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

  • 如果有人拥有您的手机并且能够根据您的手机,那么您可以做很多事情来保证您的数据安全.混淆密码并不是一个坏主意,但它并没有真正增加更多的保护.更重要的是,操作系统中已经内置了许多安全层.当然,你不想做任何愚蠢的事情来规避这些措施.最好使用像OAuth这样的系统,并在设备上存储令牌而不是用户名和密码. (49认同)
  • 我会说,在首选项中保留密码信息是有风险的.在root电话上,可以访问应用程序的首选项文件.你能做的最少就是模糊密码. (40认同)
  • 如果您使用`AccountManager`(根据我的回答,以及@ Miguel的迂回方式)并且有人拿到您的GSM手机,他们将需要继续使用您的SIM卡访问您的帐户,因为它将SIM更改时使存储的凭据无效. (4认同)
  • 很久以前就删除了对SIP更改的帐户擦除,因为它没有多大意义,特别是对于拥有多个SIM卡的人来说.如果您的手机被盗,更好的策略是转到您的Google帐户页面并撤消特定设备的访问权限. (3认同)
  • *"使用AccountManger是存储凭据的最佳选择."***为什么?** (2认同)
  • @Coder根据我的回答中链接的文档,自API 5以来,AccountManager已经可用 (2认同)

Jon*_*n O 9

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

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

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

  • 在哪里记录,如果SIM卡发生变化,AccountManager将"使本地凭证无效"? (3认同)
  • 根据@NikolayElenkov,SIM卡更改功能的无效已被删除. (2认同)
  • @ThomasW你为此被引用吗?得到某种确定的答案将是很棒的。 (2认同)

小智 8

我想,以确保您的证书最好的办法是首先考虑用存储在account.db文件加密可能无法在非root权限的设备和根设备的情况下,容易获得密码的黑客必须需要的密钥解密它.

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

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

  • 你可以发一个来源说,accounts.db是加密的吗?或者您是否应该加密特定密码? (2认同)