您是否应该使用AccountManager来存储Android应用程序的用户名和密码?

我想知道是否应该实施AccountManager保存用户凭据,如用户名,电子邮件,密码等,我找不到一个很好的理由使用它自己。

我不希望其他应用程序访问Accounts ,我不想让他们显示在“帐户和同步”设置(尽pipe也许这不是什么大不了的)。

所以我的问题是:我应该使用它吗? 优点缺点? 我可以隐藏其他应用程序的Accounts ,并阻止他们出现在“帐户和同步”?

Solutions Collecting From Web of "您是否应该使用AccountManager来存储Android应用程序的用户名和密码?"

这个问题接受的答案可能会帮助你… 我应该使用Android AccountManager的?

还应该指出,正如在上面的post中提到的,还有在没有SyncAdapter的AccountManager中? ,你不能没有一个SyncAdapter AccountManager ,所以它可能不是很好用于你的特定情况。

我看不出有任何理由使用AccountManager专门存储这种types的信息 – 在一天结束时,手动将数据手动存储在您自己的数据库或文件中没有什么不同。 如果有的话,它可能使事情复杂化 – 为什么不把它存储在SharedPreferences

我能想到的唯一原因是鼓励使用AccountManager ,如果你想跨多个不同的应用程序共享你的帐户,因为数据存储在中央Android数据存储中,所有应用程序都可以访问它。 但是,如果这不是必需的,我认为使用SharedPreferences可能更容易,更简单

概观

使用AccountManager存储凭证比存储在文件或SQL DB中要安全得多。
一个文件可以通过任何其他应用程序检索,不像通过AccountManager Android会强制只有你的应用程序将能够访问密钥。

但是,即使AccountManager在手机丢失的情况下也不能完全保证, 请参阅此处获取更多信息 。

好的做法(S)

  • 我会build议使用AccountManager而不是将密码存储在清除但散列。
  • 为了获得更好的安全级别,最好存储一个由web服务提供的设备专用令牌,并将其关联到该帐户(在web服务端),并允许用户撤销该令牌。

不好

  • 不要将明确或甚至散列的密码存储为文件或任何人都可访问的数据库。
  • 永远不要存储一个清晰的密码,而是始终使用散列。

也可以看看