我想知道是否应该实现AccountManager
来保存用户名,电子邮件,密码等用户凭据。我找不到自己使用它的充分理由。
我不希望其他应用程序访问Accounts
,我真的不希望它们显示在"帐户和同步"设置中(尽管这可能没什么大不了的)。
所以我的问题是:我应该使用它吗?优点/缺点?我可以对其他应用隐藏Accounts
并阻止它们出现在"帐户和同步"中吗?
这个公认的答案可能会帮助你......我应该使用 Android AccountManager 做什么?
还应该指出的是,正如上面的帖子和没有SyncAdapter的AccountManager中提到的,你不能有没有SyncAdapter
AccountManager
,所以在你的特定情况下使用它可能不好。
我看不出有任何理由使用专门用于存储此类信息的AccountManager
- 归根结底,这与手动将数据存储在您自己的数据库或文件中没有什么不同。如果有的话,它可能会使事情复杂化 - 你为什么不把它存储在SharedPreferences
?
我能想到鼓励使用AccountManager
的唯一原因是,如果您想在许多不同的应用程序之间共享您的帐户,因为数据存储在中央Android数据存储中,所有应用程序都可以访问该数据存储。但是,如果这不是必需的,我认为使用SharedPreferences
可能更容易和更简单
概述
使用帐户管理器存储凭据比存储在文件或 SQL DB 中安全得多。
文件可以被任何其他应用程序检索,这与通过帐户管理器不同,Android将强制只有您的应用程序才能访问密钥。
但是,即使帐户管理器在丢失手机的情况下也没有完全安全,请参阅此处以获取更多信息。
良好做法
- 我建议使用帐户管理器,而不是以明文形式存储密码,而是将哈希值存储。
- 为了获得更好的安全级别,最好存储由 Web 服务提供并与帐户关联的设备专用令牌(在 Web 服务端),并使用户能够撤销令牌。
不好
- 不要将清晰甚至散列的密码存储为文件或任何人都可以访问的数据库中。
- 切勿存储明确的密码,而始终使用哈希。
参见
- 什么保护安卓帐户管理器密码不被其他应用读取?
- http://developer.android.com/training/articles/security-tips.html#Credentials