我将使用oAuth从谷歌获取邮件和联系人。我不想每次都要求用户登录以获取访问令牌和密码。据我所知,我需要将它们与我的应用程序一起存储在数据库或SharedPreferences
中。但我有点担心安全方面的问题。我读到你可以加密和解密令牌,但攻击者很容易只需反编译你的apk和类,并获得加密密钥。
在安卓中安全存储这些令牌的最好方法是什么?
发布于 2012-04-16 00:03:53
将它们存储为shared preferences。默认情况下,这些是私有的,其他应用程序无法访问它们。在有根的设备上,如果用户明确允许访问正在尝试读取它们的应用程序,则该应用程序可能能够使用它们,但您无法阻止这一点。至于加密,您必须要求用户每次都输入解密密码(从而违背了缓存凭据的目的),或者将密钥保存到文件中,您将得到相同的问题。
存储令牌而不是实际的用户名密码有几个好处:
<代码>F210
发布于 2017-03-15 01:09:52
您可以将它们存储在AccountManager中。根据这些人的说法,这被认为是最佳实践。
以下是官方定义:
此类提供对用户在线帐户的集中注册表的访问。用户为每个帐户输入一次凭据(用户名和密码),通过“一键”批准授予应用程序对在线资源的访问权限。
有关如何使用AccountManager的详细指南,请参阅:
但是,最终AccountManager只将您的令牌存储为纯文本。因此,我建议在将您的秘密存储到AccountManager之前对其进行加密。您可以利用各种加密库,如AESCrypt或AESCrypto
另一种选择是使用Conceal library。它对Facebook来说足够安全,而且比AccountManager更容易使用。下面是使用隐藏保存秘密文件的代码片段。
byte[] cipherText = crypto.encrypt(plainText);
byte[] plainText = crypto.decrypt(cipherText);
发布于 2018-03-01 17:13:25
SharedPreferences is not本身就是一个安全的位置。在一个有根的设备上,我们可以很容易地读取和修改所有应用程序的SharedPrefereces xml,所以令牌应该相对频繁地过期。但是,即使每小时有一个令牌过期,仍有可能从SharedPreferences窃取较新的令牌。安卓KeyStore应该用于长期存储和检索密钥,这些密钥将用于加密我们的令牌,以便将它们存储在例如SharedPreferences或数据库中。密钥不存储在应用程序的进程中,因此它们可能会被are harder泄露。
因此,比地点更相关的是它们如何本身是安全的,例如,使用加密签名的短寿命JWTs,使用Android KeyStore加密它们,并使用安全协议发送它们。
https://stackoverflow.com/questions/10161266
复制相似问题